c#搜索列表<;t>;在另一个列表<;T>;
本文关键字:gt 列表 lt 另一个 搜索 | 更新日期: 2023-09-27 18:25:26
如何在List<t>
中的另一个List<t>
中搜索值
即
//FooInner Class
public class FooInner {
public int FooInnerId { get; set; }
public String FooValue { get; set; }
}
//FooOuter Class
public class FooOuter {
public int FooOuterId { get; set; }
public List<FooInner> FooInnerCollection { get; set; }
}
如果我只是想在外部类中找到一个值
// Working code
List<FooOuter> fooOuterCollection = GetSomeData();
var tmp = fooOuterCollection.Find( f => f.FooOuterId == 2 );
但是,如果我想要FooInner
对象,其中FooOuterId == 2
和FooInnerCollection.FooInnerId == 4
(或包含,具体取决于您如何看待它)。
希望这是有道理的。
fooOuterCollection
.Where(outer => outer.FooOuterID == 2)
.SelectMany(outer => outer.FooInnerCollection)
.FirstOrDefault(fooInner => fooInner.FooInnerId == 4);
首先,我们过滤外部对象,使其仅包括Id==2 的对象
然后我们使用SelectMany来压平我们可能找到的多个InnerCollection
最后,我们根据内部Id==4
您可以获得这样的内部对象-
var temp= fooOuterCollection.Where(f => f.FooOuterId == 2)
.SelectMany(f => f.FooInnerCollection)
.FirstOrDefault(fi => fi.FooInnerId == 4));
如果您需要外部对象,则需要使用Any()
扩展方法来查看inner list contains required element
-
var temp = fooOuterCollection.FirstOrDefault(f => f.FooOuterId == 2 &&
f.FooInnerCollection.Any(fi => fi.FooInnerId == 4);
您可以使用LINQ的查询语法:
var results = from o in outerList
where o.FooOuterId == 2
from i in o.FooInnerCollection
where i.FooInnerId == 4
select i;