Wie kann ich nach einer Liste von Elementen gruppieren?

8

Ich stoße immer wieder auf dieses Problem: Wie kann ich eine Liste von Objekten mit einer Liste anderer Objekte gruppieren?

Ich habe eine Liste von Objekten vom Typ A und jedes dieser Objekte hat eine Eigenschaft (lasst es ListProp nennen), was auch eine Liste ist. ListProp hat Elemente vom Typ B . Es gibt mehrere Elemente vom Typ A mit identisch B -Objekten in ListProp , aber die ListProp -Eigenschaftsreferenz unterscheidet sich von Element zu Element. Wie kann ich diese A -Objekte am schnellsten zusammenfassen, wo die B -Objekte in ListProp identisch sind?

Beispielcode:

%Vor%     
germanSharper 20.04.2012, 11:02
quelle

3 Antworten

6

Sie können IEqualityComparer<List<B>> implementieren und in der anderen GroupBy-Überladung verwenden.

%Vor%

Dann können Sie die Überlast

verwenden %Vor%     
Ufuk Hacıoğulları 20.04.2012, 11:09
quelle
4

Versuchen Sie Folgendes:

%Vor%

Es wird nach 0,1; 0,1; 0,1; 0,1,1; 0,1 entsprechend gruppiert.

    
abatishchev 20.04.2012 11:09
quelle
0
___ qstnhdr ___ Wie kann ich nach einer Liste von Elementen gruppieren? ___ answer10245062 ___

Versuchen Sie Folgendes:

%Vor%

Es wird nach %code% entsprechend gruppiert.

    
___ answer10245063 ___

Sie können %code% implementieren und in der anderen GroupBy-Überladung verwenden.

%Vor%

Dann können Sie die Überlast

verwenden %Vor%     
___ qstntxt ___

Ich stoße immer wieder auf dieses Problem: Wie kann ich eine Liste von Objekten mit einer Liste anderer Objekte gruppieren?

Ich habe eine Liste von Objekten vom Typ %code% und jedes dieser Objekte hat eine Eigenschaft (lasst es %code% nennen), was auch eine Liste ist. %code% hat Elemente vom Typ %code% . Es gibt mehrere Elemente vom Typ %code% mit identisch %code% -Objekten in %code% , aber die %code% -Eigenschaftsreferenz unterscheidet sich von Element zu Element. Wie kann ich diese %code% -Objekte am schnellsten zusammenfassen, wo die %code% -Objekte in %code% identisch sind?

Beispielcode:

%Vor%     
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123net ___ Das .NET-Framework ist ein Software-Framework, das hauptsächlich für das Microsoft Windows-Betriebssystem entwickelt wurde. Es enthält eine Implementierung der Basisklassenbibliothek, Common Language Runtime (allgemein als CLR bezeichnet), Common Type System (allgemein als CTS bezeichnet) und Dynamic Language Runtime. Es unterstützt viele Programmiersprachen, einschließlich C #, VB.NET, F # und C ++ / CLI. NICHT für Fragen zu .NET Core verwenden. ___ tag123linq ___ Die Language Integrated Query (LINQ) ist eine Microsoft .NET Framework-Komponente, die native Datenabfragefunktionen zu .NET-Sprachen hinzufügt. Bitte denken Sie bei Bedarf daran, ausführlichere Tags zu verwenden, zum Beispiel [linq-to-sql], [linq-to-entities] / [entity-framework] oder [plinq] ___ antwort10245258 ___

Ich würde das folgendermaßen angehen:

  1. Verknüpfen Sie jedes untergeordnete Element (in der ListProp-Eigenschaft) mit seinem übergeordneten
  2. Gruppiere die Eltern nach Kindern
  3. Projizieren Sie die Ergebnisse
%Vor%     
___ tag123groupby ___ GROUP BY ist ein Befehl im SQL-Standard für relationale Datenbanken zum Zusammenfalten einer Gruppe von Zeilen mit gemeinsamen Feldwerten in einer einzigen Zeile. Aggregatfunktionen können für andere Felder in der Gruppe ausgeführt werden, z. B. SUM () oder AVG (), um verwandte Daten in einem einzelnen Wert zusammenzufassen. ___
RePierre 20.04.2012 11:23
quelle

Tags und Links