需要一些有点复杂的LINQ查询的帮助

时间:2013-05-17 11:48:20

标签: linq

如果材料组列表中的任何材料具有可比性,我会根据需要执行此查询返回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视图中,使事情变得更糟。如果有人能够简化这一点,那就太棒了。

P.S.-如果你想知道我为什么在最后添加额外的.Any(x => x.Equals(true)),因为没有它,查询将返回IEnumerable bool而不是bool。

1 个答案:

答案 0 :(得分:1)

IEnumerable<Material> allMaterials = 
                      mgroup.Materials.Concat(
                      mgroup.MaterialGroups.SelectMany(group => group.Materials));
bool result = allMaterials.Any(m => Convert.ToBoolean(m.Comparable));