Linq选择主列表的子集

本文关键字:子集 列表 选择 Linq | 更新日期: 2023-09-27 18:22:06

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

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

不起作用

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

任何帮助都将不胜感激。

Linq选择主列表的子集

这应该有效:

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

这是一个IEnumerable。您可能想要.FirstOrDefault()来获取一个对象。

翻译为ComplexObj.Where(item=>IntIds.Contains(item.Id)的子列表)

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

另一个更常见的问题是Join:

var results = MasterList.Join(ChildList, (m => m.Id), (c => c), ((m,c) => m));

我相信,但不能用引用或实验数据来支持,Join会比Where->Contains更快。

这可能也会起作用:

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();