2013-05-03 74 views
0

我想编写一个linq查询来检查一个对象与另一个对象内的对象列表。关于子列表的LINQ查询

这里是我想出的,这不会产生正确的结果,因为它只是默认为第一个,所以在两个Site 1Site 2对象只显示在Site 1

filteredData = data 
       .where(f => filterInfo.Site.Name.Contains 
           (f.EtaSites.FirstOrDefault().Site.Name)).ToList() 

所以,data是一个列表,并且在每个Data对象中,有一个EtaSites的列表。每个EtaSite有一个Site。对象可以在多于一个Site中,即,在列表中有两个对象。我的查询应该拉列表中具有所选Site的任何Data对象。因此,对于一个以上的网站,我们应该能够选择Site 1Site 2并返回相同的Data对象。

回答

5

试试这个:

filteredData = data 
    .Where(f => f.EtaSites 
     .Any(a => filterInfo.Site.Name.Contains(a.Site.Name))) 
    .ToList(); 

不管怎么说,上面的例子可以让你在过滤器中选择只确切匹配。我相信你应该考虑下面的一个,如果你想要使用filterInfo.Site.Name的部分匹配值:

filteredData = data 
    .Where(f => f.EtaSites 
     .Any(a => a.Site.Name.Contains(filterInfo.Site.Name))) 
    .ToList();