Convert to LINQ

本文关键字:LINQ to Convert | 更新日期: 2023-09-27 18:13:23

我有一个包含另一个列表的列表。我想在主列表中循环,然后在所有次要列表中循环,直到次要列表中对象的id与所需的id匹配。然后返回主列表。

是否可以将以下代码转换为LINQ?

var myID = "1"; //Just a stub
var tempItem = null;
//Loop each itemA from list A
foreach (var itemA in listA)
{
    //Loop each itemB from itemA.listB
    foreach (var itemB in itemA.listB)
    {
        //Compare IDs
        if (itemB.ID == myID)
        {
            //If IDs of itemB match, return itemA
            tempItem = itemA;
            break;
        }
    }
}

Convert to LINQ

tempItem = listA.FirstOrDefault(a=> a.itemB.Any(b=>b.ID==myID))

这将返回listA项,如果没有找到列表则返回null:

var tempItem = listA.FirstOrDefault(l => l.listB.Exists(x => x.ID == myID));

我想你应该试试下面的代码

 var result = itemA.FirstOrDefault(p => p.listB.Find(t => t.ID == myID) != null));

如果没有找到匹配项,则返回null。否则,将返回第一个匹配对象。要获得匹配对象的集合,只需将FirstOrDefault方法替换为Where

foreach (var itemA in ListA.Where(itemA => itemA.B.Any(itemB => itemB.ID == myID)))
{
    tempItem = itemA;
}