Linq选择主列表的子集

8

我有一个复杂对象的主列表。

我有一个整数id列表,需要从主列表中选择相应的复杂对象。

这种方法行不通。

MasterListofComplexObj.Where(u => MasterListofComplexObj.Select(i => i.Id).Contains(ChildListofIntIds));

任何帮助都将不胜感激。

你是否遇到错误?或者得到了错误的结果?能否提供一些输入值和您期望的输出? - Wouter de Kort
4个回答

25
这应该可以正常工作:
var results = MasterListofComplexObj.Where(u => ChildListofIntIds.Contains(u.Id));

你在……感谢你的帮助。在我的想法中,逻辑有点相反,你需要取出子列表并查看它是否包含你从主列表中选择的ID。再次感谢。 - jim
1
是的,语法并不是你直觉所期望的那样 - 但由于你正在逐个查看每个 ComplexObj,所以这是有意义的。 - BrokenGlass

1
var results = from obj in MasterListofComplexObj
    where ChildListofIntIds.Contains(obj.Id)
    select obj;

这是一个IEnumerable。您可能希望使用.FirstOrDefault()方法获取一个对象。

翻译为MasterListofComplexObj.Where(item => ChildListofIntIds.Contains(item.Id))

如果您想要对象本身而不是其属性之一,则无需选择。


1
另外一个更一般的需要探究的就是Join:
var results = MasterList.Join(ChildList, (m => m.Id), (c => c), ((m,c) => m));

我相信,但无法用引文或实验数据支持,Join 操作会比 Where -> Contains 更快。


0

这个也可能同样有效:

double[] numbers1 = { 2.0, 2.0, 2.1, 2.2, 2.3, 2.3, 2.4, 2.5 };
double[] numbers2 = { 2.2 };

var isNumberTwoSubsetOfNumberOne = !numbers2.Except(numbers1).Any();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接