C#从2个IEnumerable实例中创建一个对象列表,该实例仅包含第二个列表中具有值的对象
本文关键字:列表 实例 对象 第二个 包含 2个 IEnumerable 创建 一个对象 | 更新日期: 2023-09-27 18:26:21
我有两个不同的类:
public class ClassOne
{
public string ClassOneID { get; set; }
...
}
public class ClassTwo
{
public string ClassTwoID { get; set; }
...
}
我有每个的IEnumerable
个实例。我想返回一个List<ClassOne>
,它只包含ClassOne
项,其ClassOneID
等于来自第二个IEnumerable
实例的ClassTwo
对象的ClassTwoID
(如果有意义的话!)。我在想:
var list = new List<ClassOne>();
list.AddRange(classOneEnumerable.Where(o =>
classTwoEnumerable.Select(c => c.ClassTwoID == o.ClassOneID).First()));
这个逻辑包含在离构建/测试还有几天的代码中,所以我实际上还不能运行它。我不确定我的想法是否真的正确,我希望如果我错了,有人能纠正我。
var list = (from classOne in classOneEnumerable
from classTwo in classTwoEnumerable
where classOne.ClassOneID == classTwo.ClassTwoID
select classOne).ToList();
var list2 = (from classOne in classOneEnumerable
join classTwo in classTwoEnumerable
on classOne.ClassOneID equals classTwo.ClassTwoID
select classOne).ToList();
两个查询将产生相同的结果。
如果您能处理O(n2)
,那么现有的答案就可以了。否则,我会对内部值进行排序,以便您可以获得n log(n)
性能。
试试这个
var list = classOneEnumerable.Where(o => classTwoEnumerable
.Any(c => c.ClassTwoID == o.ClassOneID)))
.ToList();