LINQ选择多个值

时间:2013-03-28 04:16:44

标签: c# linq

我的代码如下,此代码的用法是将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();

3 个答案:

答案 0 :(得分:12)

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

返回的数组将包含具有相同属性itemIDitemName的对象。

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

示例输出:

enter image description here

答案 1 :(得分: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();

答案 2 :(得分: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;
}