2013-03-28 116 views
6

我的代码如下,该代码的用途是合并在一起2列表。并从一个到另一个取代它的价值。LINQ选择多重价值

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

通过使用'SelectMany'也许? – joce 2013-03-28 04:18:44

+0

您在选择和{之间缺少“新”,等号左边的名称是新属性而不是L1的一部分,因此不应以L1为前缀。总之,你想要的东西喜欢选择新{ItemName1 = L1.itemName,ItemName2 = L2.itemName,数量= L2.Quantity} – Rune 2013-03-28 04:49:45

回答

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

这是什么意思? – TGH 2013-03-28 04:19:55

+0

烨,但这将返回错误 – 2013-03-28 04:26:42

+0

它返回这个错误“错误无效的匿名类型成员声明匿名类型的成员必须有一个成员分配,简单名称或成员访问来声明。” – 2013-03-28 04:28:55

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; 
}