从linq选择查询中读取结果

时间:2015-09-14 08:53:46

标签: c# .net linq

我有两个相同的自定义类型列表(A& B)(如下所示)

MyClass
{
    id as string
    acidity as double
    region as string
}

我需要遍历列表A并查看id是否在列表B中。如果它在列表B中,我需要将列表B中的区域复制到列表A.执行此操作的最佳方法是什么?下面是一个简单的例子,

List A             List B
id   region        id      region
abc                njp     EU
mno                plm     US
jkl                mno     US
                   abc     EU

结果我正在寻找

List A
id    region
abc   EU
mno   US
jkl

我正在考虑循环遍历列表A中的每个id并使用如下所示的linq查询。但是我有两个问题,

 var reg = from b in B
 where A[i].id == b.id
 select b.Region;

我知道上面的linq查询将返回一个值或没有值。那么如何将结果输入我的A [i] .Region变量?如果没有返回结果,我该如何处理?我是否必须使用foreach,即使我知道只有最大结果?

2 个答案:

答案 0 :(得分:6)

好的,听起来你可能想要一个连接,以便你可以识别对,然后你可以复制这些区域:

var query = from itemA in listA
            join itemB in listB on itemA.id equals itemB.id
            select new { itemA, itemB };

foreach (var pair in query)
{
    pair.itemA.Region = pair.itemB.Region;
}

答案 1 :(得分:0)

请参阅此代码:

foreach(var a in listA)
{
    var bForA = listB.FirstOrDefault(b => b.id == a.id);
    if (bForA != null)
        a.Region = bForA.Region;
}
相关问题