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

这个逻辑包含在离构建/测试还有几天的代码中,所以我实际上还不能运行它。我不确定我的想法是否真的正确,我希望如果我错了,有人能纠正我。

C#从2个IEnumerable实例中创建一个对象列表,该实例仅包含第二个列表中具有值的对象

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