Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要一些关于有点复杂的LINQ查询的帮助吗_Linq - Fatal编程技术网

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

需要一些关于有点复杂的LINQ查询的帮助吗,linq,Linq,我有一个查询,它实现了我想要的功能,即如果材质组列表中的任何材质具有可比性,则返回true mgroup.MaterialGroups.Select(x => x.Materials .Any(m => Convert.ToBoolean(m.Comparable))) .Any(x => x.Equals(true)) 我想添加到这个查

我有一个查询,它实现了我想要的功能,即如果材质组列表中的任何材质具有可比性,则返回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及其MaterialGroup组合在一起,以便选择它们的两种材质?谢谢

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

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.NETMVC视图中,使事情变得更糟。如果有人能简化这一点,那将是惊人的

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

IEnumerable allMaterials=
IEnumerable<Material> allMaterials = 
                      mgroup.Materials.Concat(
                      mgroup.MaterialGroups.SelectMany(group => group.Materials));
bool result = allMaterials.Any(m => Convert.ToBoolean(m.Comparable));
经理组。物料。混凝土( mgroup.MaterialGroups.SelectMany(group=>group.Materials)); bool result=allMaterials.Any(m=>Convert.ToBoolean(m.compariable));
谢谢,但遗憾的是,只有当mgroup.MaterialGroup具有可比材料时,才会返回true,但如果mgroup本身具有可比材料,则不会返回true。我发布的第二个查询仅适用于后者,而我发布的第一个查询仅适用于前者。这就是为什么如果可能,我会尝试将它们合并到一个语句中。Yep,它确实有效。这不是一个简单的查询,是吗?或者也许我只是没有足够的LINQ。哈哈,在你看来,在视图中使用哪个更好?声明一个IEnumerable只用于一个条件是否不好?@Smith你觉得代码块可读吗?如果是这样,那么这样写完全合法是的,它绝对可读e除了selectmany之外,我还要查一下。谢谢。@Smith selectmany将单个材料集合合并为一个材料集合