Casablanca: LeftJoin in LINQ

Hallo Forum,

ich bräuchte wieder einmal eure Hilfe bei einem LINQ-Problem. Ich habe eine Anfrage, die mir 3-4 Liste (List<List<object>>) zurück gibt. Jede Liste beinhaltet mehrere anonymen Objekte, die u.a. über ein Datum- und ID-Feld verfügen. Die in einer Liste vorhandene Objekte haben dieselben IDs.

LISTE
LISTE
   Liste1--->objeckt1--> 2005.01.01, ID=123
             objeckt2--> 2005.01.02, ID=123            
             objeckt3--> 2005.01.04, ID=123
             objeckt3--> 2005.01.05, ID=123
             objeckt3--> 2005.01.07, ID=123
   Liste2--->objeckt1--> 2005.01.02, ID=456
             objeckt3--> 2005.01.03, ID=456
             objeckt3--> 2005.01.08, ID=456
   Liste3--->objeckt1--> 2005.01.04, ID=789
             objeckt3--> 2005.01.05, ID=789
             objeckt2--> 2005.01.06, ID=789            
             objeckt3--> 2005.01.09, ID=789

Nun zum Problem: Wie man sieht, sind die Listen unterschiedlich groß. Das liegt daran, weil Tage (Date) in jeder Liste unterschiedlich erfast sind. Während die erste Liste z.B. die Tage Montag, Dienstag, Mittwoch, Donnesrstag und Freitag beinhaltet, binhalten andere Liste andere Tage. Meine Aufgabe besteht nun darin, via Linq die Länge der Listen zu begleichen, indem ich für die nicht vorhandnen Tage in einer Liste ein Object mit den Gleichen Felder als NULL-Record einfüge. Das Ergebnis soll wie folgt aussehen:

LISTE
   Liste1--->objeckt1--> 2005.01.01, ID=123, 
             objeckt2--> 2005.01.02, ID=456, 
             objeckt3--> 2005.01.03, ID=456, NULL            
             objeckt4--> 2005.01.04, ID=123,
             objeckt5--> 2005.01.05, ID=123,
             objeckt6--> 2005.01.06, ID=456, NULL
             objeckt7--> 2005.01.07, ID=123,
             objeckt8--> 2005.01.08, ID=456, NULL
             objeckt9--> 2005.01.09, ID=456, NULL
   Liste2--->objeckt1--> 2005.01.01, ID=456, NULL
             objeckt2--> 2005.01.02, ID=456
             objeckt3--> 2005.01.03, ID=456
             objeckt4--> 2005.01.04, ID=456, NULL
             objeckt5--> 2005.01.05, ID=456, NULL
             objeckt6--> 2005.01.06, ID=456, NULL
             objeckt7--> 2005.01.07, ID=456, NULL
             objeckt8--> 2005.01.08, ID=456
             objeckt9--> 2005.01.09, ID=456, NULL
   Liste3--->objeckt1--> 2005.01.01, ID=789, NULL
             objeckt2--> 2005.01.02, ID=789, NULL
             objeckt3--> 2005.01.03, ID=789, NULL
             objeckt4--> 2005.01.04, ID=789
             objeckt5--> 2005.01.05, ID=789
             objeckt6--> 2005.01.06, ID=789
             objeckt7--> 2005.01.07, ID=789, NULL 
             objeckt8--> 2005.01.08, ID=789, NULL           
             objeckt9--> 2005.01.09, ID=789

Das sieht wie ein leftjoin aus. Aber wie Kann man mit LINQ so etwas hinbekommen? Ich kann auch alles als eine lange Liste zurückbekommen, in der alle Datensätze vorhanden sind

Danke im Voraus

  1. Tach!

    Das sieht wie ein leftjoin aus. Aber wie Kann man mit LINQ so etwas hinbekommen?

    LINQ kennt auch Joins, sogar Left Outer Joins.

    dedlfix.