如何在另一个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
(或包含取决于你如何看待它),该怎么办呢。
希望这是有道理的。
答案 0 :(得分:3)
你可以得到像这样的内部对象 -
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);
答案 1 :(得分:3)
fooOuterCollection
.Where(outer => outer.FooOuterID == 2)
.SelectMany(outer => outer.FooInnerCollection)
.FirstOrDefault(fooInner => fooInner.FooInnerId == 4);
首先,我们将外部对象过滤为仅包含Id == 2
的外部对象然后我们使用SelectMany来展平我们可能找到的多个InnerCollections
最后我们根据内部Id == 4
进行过滤答案 2 :(得分:0)
您可以使用LINQ的查询语法:
var results = from o in outerList
where o.FooOuterId == 2
from i in o.FooInnerCollection
where i.FooInnerId == 4
select i;