如果材料组列表中的任何材料具有可比性,我会根据需要执行此查询返回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。
答案 0 :(得分:1)
IEnumerable<Material> allMaterials =
mgroup.Materials.Concat(
mgroup.MaterialGroups.SelectMany(group => group.Materials));
bool result = allMaterials.Any(m => Convert.ToBoolean(m.Comparable));