我想编写一个linq查询,该查询根据另一个对象内的对象列表检查对象。
以下是我提出的内容,它不会产生正确的结果,因为它只默认为第一个,因此Site 1
和Site 2
处的对象仅显示在{ {1}}:
Site 1
因此,filteredData = data
.where(f => filterInfo.Site.Name.Contains
(f.EtaSites.FirstOrDefault().Site.Name)).ToList()
是一个列表,在每个data
对象中,都有一个Data
列表。每个EtaSites
都有一个EtaSite
。 Site
对象可以在多个Data
中,即列表中有两个Site
个对象。我的查询应该拉出列表中包含所选EtaSites
的任何Data
对象。因此,对于多个网站的用户,我们应该能够选择Site
或Site 1
并返回相同的Site 2
对象。
答案 0 :(得分: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();