2016-08-24 3 views
-4

Ich versuche, eine LINQ-Anweisung für das Beitreten der beiden folgenden Liste in C# zu erstellen.C# LINQ-Anweisung für das folgende Szenario

List1:

FormID FormRound 
2  1 
2  2 
2  3 
3  1 
4  2 

List2:

FormID FormRound Category Date 
2   1  Test1  23-Aug 
2   1  Test2  24-Aug 
2   1  Test3  25-Aug 
2   2  Test1  26-Aug 
2   2  Test3  27-Aug 
3   1  Test1  28-Aug 
3   1  Test2  29-Aug 
3   1  Test3  30-Aug 

Ich sollte wie die folgende Ausgabe erhalten.

FormID FormRound Test1Date Test2Date Test3Date 
2   1   23-Aug 24-Aug  Test3 
2   2   26-Aug NA   27-Aug 
3   3   28-Aug 29-Aug  NA 

Kann jemand mir bitte helfen, die LINQ-Anweisung in Framing?

+0

Ihr Listenformat ist schwer zu lesen, könnten Sie ein anderes Trennzeichen verwenden und es für bessere Lesbarkeit in den Codeblock einfügen? –

+1

Der erste Eintrag unter der Spalte "Test3Date" sollte sicherlich "25-Aug" und nicht "Test3" sein, korrekt? Und 'FormRound' für' FormID = 3' sollte '1' und nicht' 3' sein, oder? Aaund das letzte Datum unter 'Test3Date' sollte dann' 30-Aug' sein, oder? Wenn nicht, dann sind Ihre Ergebnisse unmöglich. –

+0

Was ist 'List1' für? Von dem, was ich sehe, kann Ihre Ausgabe nur mit 'List2' gemacht werden. Ich habe auch die Inkonsistenzen @ Cᴏʀʏ genannt. – Andrew

Antwort

0

könnte diese LINQ-Abfrage wie folgt aussehen:

var results = (from a in list1 
       join b in list2 on new { a.FormId, a.FormRound } equals new { b.FormId, b.FormRound } 
       group b by new { a.FormId, a.FormRound } into c 
       select new 
       { 
        c.Key.FormId, 
        c.Key.FormRound, 
        Test1Date = c.Where(d => d.Category == "Test1").Select(e => e.Date).FirstOrDefault(), 
        Test2Date = c.Where(d => d.Category == "Test2").Select(e => e.Date).FirstOrDefault(), 
        Test3Date = c.Where(d => d.Category == "Test3").Select(e => e.Date).FirstOrDefault(), 
       }); 

Which, Ihre Beispieldaten erzeugt:

2 1 23-Aug 24-Aug 25-Aug 
2 2 26-Aug null 27-Aug 
3 1 28-Aug 29-Aug 30-Aug 

Dies ist Ergebnis nicht genau Ihre erwartete, aber ich denke, Sie einige Probleme mit was Sie aufgrund meiner Kommentare zu Ihrer Frage erwarten.

+0

Ist 'list1' überhaupt nützlich? – Andrew

+0

Es ist, weil 'list1' Einträge für' FormId' = 4 hat, die nicht in 'list2' sind. Der Join filtert diese heraus. –

+0

Genau, "list1" zu ignorieren, ändert nichts. Wenn "list1" nicht "2 - 2" hätte und die zweite Zeile nicht in den Ergebnissen erscheinen würde, hätte es vielleicht etwas genutzt. – Andrew

Verwandte Themen