Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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
C# 用于返回具有特定属性值的嵌套数组的Linq查询_C#_Arrays_Linq_Properties_Nested - Fatal编程技术网

C# 用于返回具有特定属性值的嵌套数组的Linq查询

C# 用于返回具有特定属性值的嵌套数组的Linq查询,c#,arrays,linq,properties,nested,C#,Arrays,Linq,Properties,Nested,我一直在搜索多个资源,但无法找到这一个;我试图根据嵌套了几层的属性过滤对象数组。我简化了一些事情,所以假设我有以下几个类: class A { B[] bb; } class B C[] cc; } class C { string value; } 现在是代码: A[] aa = ...; A[] filteredAa = aa.Where(... //NEED HELP HERE 我要做的是过滤aa数组,这样它只会给那些至少有一个B元素的A元素,而至少有一个C元素的A元

我一直在搜索多个资源,但无法找到这一个;我试图根据嵌套了几层的属性过滤对象数组。我简化了一些事情,所以假设我有以下几个类:

class A {
  B[] bb;
}

class B 
  C[] cc;
}

class C {
  string value;
}
现在是代码:

A[] aa = ...;
A[] filteredAa = aa.Where(... //NEED HELP HERE
我要做的是过滤aa数组,这样它只会给那些至少有一个B元素的A元素,而至少有一个C元素的A元素的值为hello,例如,如果aa[0].bb[3].cc[2].value=hello,那么aa[0]将包含在filteredAa数组中

这种类型的过滤甚至可以完成吗?我认为并希望这是有意义的,但如果我能进一步澄清,请告诉我。

试试这个:

A[] filteredAa = aa.Where(a => a.bb.Any(b => b.cc.Any(c => c.value == "hello"))).ToArray();
试试这个:

A[] filteredAa = aa.Where(a => a.bb.Any(b => b.cc.Any(c => c.value == "hello"))).ToArray();

如果要查找值为特定值的位置:

var result = aa.Where(a=>a.bb.Any(b => b.cc.Any(c => c.Value == "hello"));
如果您只想获取所有具有任何值的值:

var result = aa.Where(a=>a.bb.Any(b => b.cc.Any(c => !string.IsNullOrEmpty(c.Value)));

如果要查找值为特定值的位置:

var result = aa.Where(a=>a.bb.Any(b => b.cc.Any(c => c.Value == "hello"));
如果您只想获取所有具有任何值的值:

var result = aa.Where(a=>a.bb.Any(b => b.cc.Any(c => !string.IsNullOrEmpty(c.Value)));
您需要使用-听起来您需要使用两次:

var query = aa.Where(a => a.bb.Any(b => b.cc.Any(c => c.value == "hello")));
因此,从内部着手:

如果C对象的值为hello,则它很有用 如果B对象的任何C值都是有用的,则B对象是有用的 如果某个对象的任何B值都有用,则该对象是有用的 其中过滤对象序列,只留下有用的对象 如果确实需要数组,可以在末尾使用ToArray,但我通常会使用ToList或将其作为IEnumerable保存。

您需要使用-听起来您需要使用两次:

var query = aa.Where(a => a.bb.Any(b => b.cc.Any(c => c.value == "hello")));
因此,从内部着手:

如果C对象的值为hello,则它很有用 如果B对象的任何C值都是有用的,则B对象是有用的 如果某个对象的任何B值都有用,则该对象是有用的 其中过滤对象序列,只留下有用的对象
如果确实需要数组,可以在末尾使用ToArray,但我通常会使用ToList或将其保留为IEnumerable。

有什么问题?没有结果?错误?只有一个结果应该是20?对不起,我从我的问题中删除了我的代码示例,因为它实际上根本不起作用。不过豪伊拿到了!什么问题?没有结果?错误?只有一个结果应该是20?对不起,我从我的问题中删除了我的代码示例,因为它实际上根本不起作用。不过豪伊拿到了+1我喜欢这个,因为它使用的是not null而不是hello,因为他最初的未编辑问题询问的结果是value存在的地方而不是value为hello+1我喜欢这个,因为它使用的是not null而不是hello,正如他最初未经编辑的问题所要求的结果是价值存在的地方,而不是价值所在的地方。这是一个非常好的解释,真的把任何方法放在了上下文中——没有意识到它这么简单。很好的解释,真的把任何方法放在了上下文中——没有意识到它这么简单。我很抱歉,为时已晚,但下一次,我会这么做;我很抱歉,太晚了,但是下次,我会做的;