【发布时间】:2012-12-03 22:08:01
【问题描述】:
我有一个列表类型:
List<Concept>
--- Property
--- List<Class2>
--- --- Class2pty
--- --- Class2pty2
--- List<Class3>
--- --- Class3pty
有一个查询字符串,我需要一个新的 Concepts 列表,该列表在任何属性(嗯,一种属性)上都有该查询字符串,例如 Property 或 Class2pty2,Class3pty...
使用 Where 我可以查询 Property 但我不知道如何查询 Class2pty 如果匹配,则返回 具有那个Class2
的概念那么,我可以使用单个嵌套查询来做到这一点吗?或者我能做什么?
编辑:由于不清楚,我举个例子
假设我有一个“foo”的查询字符串,并且我有一个包含这 4 个项目的列表
Concept
--- Property = "foo"
--- List<Class2>
--- --- Class2pty
--- --- Class2pty2
--- List<Class3>
--- --- Class3pty
Concept
--- Property
--- List<Class2>
--- --- Class2pty = "foo"
--- --- Class2pty2
--- List<Class3>
--- --- Class3pty
Concept
--- Property
--- List<Class2>
--- --- Class2pty = "bar"
--- --- Class2pty2
--- List<Class3>
--- --- Class3pty
Concept
--- Property
--- List<Class2>
--- --- Class2pty
--- --- Class2pty2
--- List<Class3>
--- --- Class3pty = "foo"
第一个列表项在 Property 上有 foo,在第二个项目上(假设 List
因此,当任何概念项(包括其子项)具有该 foo 项的属性时,返回该概念项。在我们的例子中,是 1、2 和 4。
简而言之,拥有一个带有内部列表的概念列表,返回每个具有该字符串属性的概念,或者如果它们的一个子实例具有该属性。
【问题讨论】:
-
我认为在
.Where()之后你可以简单地做一个.ToList()然后继续方法链接。 -
我不确定。如果 Where with Property 返回 none(未找到匹配项),则结果列表将为空,因此我无法链接。
-
这看起来像一个已知深度的树遍历。所以我不确定你是否可以在单个查询中完成。
-
你知道你查询的是什么属性吗?有什么限制。如果你知道你将要测试什么,你可以做什么...
list.Where(i => i.Property == "something" && (i.Class2.Where(x => x.Class2pty == "").ToList().Count > 0)); -
这是一个已知深度的列表,不需要单个查询。你说的 Jared,是我首先尝试的,但这不起作用,你在做一个 bool && IEnumerable
.