6

私のコードは次のとおりです。このコードの使用法は、2 つのリストをマージすることです。その値を別のものに置き換えます。

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

上記のコードは完全に機能しますが、 itemName である単一の属性を選択する場合のみです。複数の値を選択する場合、どのようにコードを記述すればよいですか?

例えば

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

3 に答える 3

12

以下に示すように、プロパティ名を直接使用できます。

返される配列には、同じ PropertiesitemIDとを持つオブジェクトが含まれますitemName

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

サンプル出力:

ここに画像の説明を入力

于 2013-03-28T04:31:34.577 に答える
1
(from L1 in List1
         join L2 in List2
         on L1.itemID equals L2.itemID
         select  new{Prop1 = L1.SomePropery,Prop2 = L1.SomeOtherProperty).ToArray();

または unnamed - デフォルト名を使用

(from L1 in List1
         join L2 in List2
         on L1.itemID equals L2.itemID
         select  new{L1.SomePropery,L1.SomeOtherProperty).ToArray();
于 2013-03-28T04:18:33.960 に答える
0

2 つのオブジェクトをマージする場合は、最初に結合する対応するオブジェクトを一致させてから、一致したオブジェクトを調べてプロパティをコピーする必要があります。そのような LINQ クエリを使用しないでください。それは設計されたものではありません。

// 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;
}
于 2013-03-28T04:57:16.647 に答える