2013-03-28 11 views
6

Mein Code ist wie folgt, die Verwendung dieses Codes besteht darin, 2 Liste zusammenzuführen. und ersetze seinen Wert von einem zum anderen.LINQ Wählen Mehrere Wert

(from L1 in List1 
     join L2 in List2 
     on L1.itemID equals L2.itemID 
     select L1.itemName= L2.itemName).ToArray(); 

Der obige Code arbeiten perfekt, aber nur für ein einziges Attribut ausgewählt werden, die itemName ist, wie soll ich den Code schreiben, wenn ich mehr als 1 Wert auswählen möchten,

zB

(from L1 in List1 
    join L2 in List2 
    on L1.itemID equals L2.itemID 
    select {L1.itemName= L2.itemName , L1.ItemQuantity = L2.Quatity}).ToArray(); 
+1

Mit 'SelectMany' vielleicht? – joce

+0

Sie vermissen "neu" zwischen select und {, und die Namen links von den Gleichheitszeichen sind neue Eigenschaften und nicht Teil von L1, sollten also nicht mit L1 vorangestellt werden. Alles in allem möchten Sie etwas wie wählen Sie neue {ItemName1 = L1.itemName, ItemName2 = L2.itemName, Menge = L2.Quantity} – Rune

Antwort

12

Sie könnten die Eigenschaftennamen direkt verwenden, wie unten gezeigt. Das zurückkehrende Array enthält Objekte mit den gleichen Eigenschaften itemID und itemName.

 var outp = (from L1 in List1 
        join L2 in List2 
        on L1.itemID equals L2.itemID 
        select new { L1.itemID, L2.itemName }).ToArray(); 

Beispielausgabe:

enter image description here

1
(from L1 in List1 
     join L2 in List2 
     on L1.itemID equals L2.itemID 
     select new{Prop1 = L1.SomePropery,Prop2 = L1.SomeOtherProperty).ToArray(); 

OR unbenannte -verwenden Standardnamen

(from L1 in List1 
     join L2 in List2 
     on L1.itemID equals L2.itemID 
     select new{L1.SomePropery,L1.SomeOtherProperty).ToArray(); 
+0

Ist das was du meinst? – TGH

+0

yup, aber das wird Fehler –

+0

zurückgegeben wird dieser Fehler zurückgegeben "Fehler Ungültiger anonymer Typ Member Deklarator. Anonyme Typ Mitglieder müssen mit einer Member-Zuweisung, einfachen Namen oder Member-Zugriff deklariert werden." –

0

Wenn Sie die beiden Objekte zusammenführen möchten, sollten Sie zunächst passen Objekte entsprechend verbunden werden, gehen dann durch die abgeglichenen Objekte und kopieren Sie die Eigenschaften über. Verwenden Sie keine LINQ-Abfrage wie diese, für die sie nicht vorgesehen ist.

// pair off all the items in both lists 
var matches = 
    from item1 in List1 
    join item2 in List2 on item1.ItemID equals item2.ItemID 
    select new { item1, item2 }; 
foreach (var match in matches) 
{ 
    // copy the properties over for each corresponding match 
    match.item1.ItemName = match.item2.ItemName; 
    match.item1.ItemQuantity = match.item2.Quantity; 
}