2

List<t>我将如何在另一个内部搜索一个值List<t>

IE

//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 == 2FooInnerCollection.FooInnerId == 4(或包含取决于您如何看待它)怎么办。

希望这是有道理的。

4

3 回答 3

4
fooOuterCollection
    .Where(outer => outer.FooOuterID == 2)
    .SelectMany(outer => outer.FooInnerCollection)
    .FirstOrDefault(fooInner => fooInner.FooInnerId == 4);

首先,我们过滤外部对象以仅包含 ID == 2 的对象

然后我们使用 SelectMany 来展平我们可能找到的多个 InnerCollections

最后我们根据内部Id == 4进行过滤

于 2013-07-28T19:08:59.613 回答
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);
于 2013-07-28T19:06:06.410 回答
0

您可以只使用 LINQ 的查询语法:

var results = from o in outerList
      where o.FooOuterId == 2
      from i in o.FooInnerCollection
      where i.FooInnerId == 4
      select i;
于 2013-07-28T19:10:40.060 回答