2016-11-21 60 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; 
     } 

    }