【发布时间】:2012-08-20 15:36:35
【问题描述】:
我有一个 List 集合,其中包含一个 List 子集合作为其中的属性,我想根据某些属性的值过滤掉该子集合中的项目。
为简化起见,我将主集合称为 THING 和子集合 SUBTHING。它们是不同的类型。 THINGS 可以有 1 到多个 SUBTHINGS。 SUBTHING 有 2 个我要过滤的属性,PROP1 应该等于 1(它可以等于 1,2,3)并且 PROP2 不应该是 NULL(它可以包含一个字符串)。
因此,当我使用如下查询时,它似乎给了我想要的东西(尽管我不确定 All() 是否符合我的预期):
search = from c in search
where c.SUBTHING.All(s=>s.PROP1==1)
select c;
然后当我添加其他属性时我会怀疑:
search = from c in search
where c.SUBTHING.All(s=>s.PROP1==1 && s.PROP2 != NULL)
select c;
我得到了 PROP2 为 Null 的 THINGS。
当我切换到 Any() 时,我失去了对 SUBTHING 的所有过滤,它显示了 PROP1 = 1、2、3 和 PROP2 为 NULL 而不是 NULL 的 SUBTHINGS。
我想要得到的是一个集合,它列出了所有 THING ID,然后列出了所有 SUBTHINGS 的名称,有点像这样:
THING.ID
SUBTHING.Name
SUBTHING.Name
THING.ID
SUBTHING.Name
SUBTHING.Name
由于 THING 和 SUBTHING 是两种不同的类型,是否可以在使用 LINQ 过滤 THINGS 的同时过滤 SUBTHINGS?
【问题讨论】:
-
“我想要得到的是一个列出所有 SUBTHING ID 的集合......” 是一个错字,应该是 “我想要得到的是一个列出所有 THING ID 的集合......” ?!
-
@ewomack,您是否尝试在搜索中修改 c 以使除 SUBTHING 被过滤之外的所有内容都具有完全相同的值?
-
如果我对您的理解正确,您希望整个层次结构中的所有 SUBTHINGS 具有 PROP1=1 和 PROP2!=Null 以及它们对应的 THING.ID....对吗?
-
@Tim,是的,你是对的,这是一个错字。固定的。谢谢!
-
@M Afifi 和 DarkSquirrel,是的,你们俩听起来都对 - 我正在尝试从 THINGS-->SUBTHINGS 的层次结构中过滤子集合 SUBTHINGS。