0

如果任何材料在材料组列表中具有可比性,我有这个查询可以执行我想要的返回 true。

mgroup.MaterialGroups.Select(x => x.Materials
                                   .Any(m => Convert.ToBoolean(m.Comparable)))
                                   .Any(x => x.Equals(true))

我想添加到这个查询中的是也包括这个。

mgroup.Materials.Any(m => Convert.ToBoolean(m.Comparable));

如何在查询中将 mgroup 和它的材料组组合在一起,以便我可以选择它们的两种材料?谢谢。

编辑- 在与 LINQ 战斗了一段时间后,我崩溃了,只是合并为

mgroup.Materials.Any(m => Convert.ToBoolean(m.Comparable) || 
mgroup.MaterialGroups.Select(x => x.Materials
                     .Any(c => Convert.ToBoolean(c.Comparable)))                                                                                                                                   
                     .Any(x => x.Equals(true)))  

它按预期工作,但它非常长,并且嵌入在 Asp.net MVC 视图中,使事情变得更糟。如果有人可以简化这将是惊人的。

PS-如果您想知道为什么我在末尾添加了额外的 .Any(x => x.Equals(true),那是因为没有它,查询将返回布尔值的 IEnumerable 而不是布尔值。

4

1 回答 1

1
IEnumerable<Material> allMaterials = 
                      mgroup.Materials.Concat(
                      mgroup.MaterialGroups.SelectMany(group => group.Materials));
bool result = allMaterials.Any(m => Convert.ToBoolean(m.Comparable));
于 2013-05-17T11:55:32.947 回答