2016-11-21 2 views
-4

Ich habe eine Anforderung, wo ich Datensätze gruppieren muss. Zum Beispiel habe ich 150 Datensätze und ich brauche sie in 5 Gruppen, 30 Datensätze in jeder Gruppe.LINQ, um Datensätze in Gruppe

Kann mir jemand sagen, wie kann ich das erreichen?

Vielen Dank im Voraus.

+2

Wie sieht Ihre Datenstruktur der Datensätze aus, die Sie gruppieren müssen? Müssen Sie unterschiedslos gruppieren (z. B. 1-30, 31-60, 61-90 usw.) oder haben Sie ein Feld, nach dem Sie gruppieren möchten? – pieperu

+0

Wie entscheiden Sie sich, eine neue Gruppe zu erstellen? Was ist, wenn du 10 Gegenstände hast? Wie viele Gruppen möchten Sie in diesem Fall? Es ist nicht klar, was Sie erreichen möchten. – Dieterg

+2

GroupBy ist der Weg zu gehen. Willst du eine ausführlichere Antwort? Schreiben Sie eine ausführlichere Frage – Alex

Antwort

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

Während dieses Code-Snippet kann die Frage lösen, [einschließlich einer Erklärung] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based- Antworten) hilft wirklich, die Qualität Ihrer Post zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. –

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

Wenn Nummern 150 und 30 sind nur ein Beispiel, dann können Sie leicht Skip (pageindex * Seitengröße) .Nehmen (pagesize) in einer Schleife setzen.

+0

Natürlich nimmt dies an, dass die "Aufzeichnungen" in einer bestimmten Reihenfolge sind –

+0

@RowlandShaw oder die Reihenfolge spielt keine Rolle :) – mayu

+0

'g2' * könnte * die Ergebnisse von' g1' wiederholen, wenn sie nicht in einer bestimmten Reihenfolge sind , so erhalten Sie einen Fehler, dass einige Ergebnisse nicht zurückgegeben werden. –

0

Sie können es auch leicht mit MoreLinq:

var items = list.Batch(30); 
0

Wenn es von einem Grundstück keine spezifische Gruppe ist und in bestimmten Größe wollen, dass sie nur dann dieses:

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; 
    } 
} 

Thanx zu Hassan Kahn

0

Angenommen, Sie haben einen Listennamen EmployeeList mit verschiedenen Abteilungen. Sie müssen sie also nach Employee Department gruppieren

 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; 
     } 

    }