读取linq select查询的结果

本文关键字:结果 查询 select linq 读取 | 更新日期: 2023-09-27 18:12:41

我有两个列表(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]呢?地区变量?另外,如果没有返回结果,我该如何处理?我是否必须使用foreach,即使我知道只有最大值的结果?

读取linq select查询的结果

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

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

没有临时列表声明(from a1 in a from b1 in b where a1.id == b1.id && a1.region != b1.region select new {selectedA = a1, selectedB = b1}).ToList().ForEach(x => x.selectedA.region = x.selectedB.region);

请查看此代码:

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