2016-11-21 61 views
-4

我有一個要求,我需要組合記錄。例如,我有150條記錄,我需要將它們分成5組,每組30條記錄。LINQ獲取組中的記錄

任何人都可以讓我知道我該怎麼做到這一點?

在此先感謝。

+2

您需要組的記錄的數據結構是什麼樣的?你是否需要不分青紅皁白地組合(即1-30,31-60,61-90等),還是你有一個你想分組的場? – pieperu

+0

你如何決定創建一個新的組?如果你有10件物品呢?在這種情況下你想要多少組?目前還不清楚你想達到什麼樣的效果。 – Dieterg

+2

GroupBy是要走的路。想要更詳細的答案?寫一個更詳細的問題 – Alex

回答

0
var groups = myRecords.Select((e, i) => new { Item = e, Grouping = (i/5) }).GroupBy(e => e.Grouping); 
+1

雖然這段代碼可以解決這個問題,[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-答案)確實有助於提高發布的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 –

0
var g1 = records.Take(30); 
var g2 = records.Skip(30).Take(30); 
... 

如果號碼150和30只是一個例子,那麼你可以在一個循環中很容易地把跳過(PageIndex的* pageSize的)。取(pageSize的)。

+0

當然,這裏假定'records'是按照確定的順序 –

+0

@RowlandShaw或者順序無關緊要的。:) – mayu

+0

'g2' *如果不是按照確定的順序,可以從'g1'重複結果,所以你會得到一些不返回結果的錯誤。 –

0

您還可以使用MoreLinq做到這一點很容易:

var items = list.Batch(30); 
0

如果有地產沒有特定羣體,只是希望他們在特定的大小,則這樣的:

static class LinqExtensions 
{ 
    public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> list, int parts) 
    { 
     int i = 0; 
     var splits = from item in list 
        group item by i++ % parts into part 
        select part.AsEnumerable(); 
     return splits; 
    } 
} 

感謝名單,以Hassan Kahn

0

假設您有一個列表名稱EmployeeList具有不同的部門。因此您需要按員工部門對其進行分組

 public class Employee 
     { 
     public string Name { get; set; } 
     public string Department { get; set; } 

     } 
    public class EmployeeDepartMentList 
    { 
     public string DepartMentName {get;set; } 
     public List<Employee> EmployeeList { get; set; } 

    } 
    public class FinalResult 
    { 
     public List<EmployeeDepartMentList> GetEmployeesByDepartment() 
     { 
      List<Employee> EmployeeList = new List<Employee>(); 

      var Model = EmployeeList.Select(x => x.Department).Distinct().Select(x => new EmployeeDepartMentList 
      { 
       DepartMentName = x, 
       EmployeeList = EmployeeList.Where(y => y.Department == x).ToList() 

      }).ToList(); 
      return Model; 
     } 

    }