6

我的代码如下,这段代码的用途是将2个列表合并在一起。并将其值从一个替换为另一个。

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

上面的代码完美运行,但仅用于选择单个属性 itemName ,如果我想选择超过 1 个值,我应该如何编写代码,

例如

(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

您可以直接使用属性名称,如下所示。

返回的数组将包含具有相同 PropertiesitemIDitemName.

        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();

或未命名 - 使用默认名称

(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

如果你想合并两个对象,你应该首先匹配要连接的相应对象,然后遍历匹配的对象并将属性复制过来。不要使用这样的 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 回答