C#从2个IEnumerable实例创建一个对象列表,其中只包含那些在第二个列表中找到值的对象

时间:2014-10-13 05:06:00

标签: c# linq ienumerable

我有两个不同的类:

public class ClassOne
{
    public string ClassOneID { get; set; }
    ...
}

public class ClassTwo
{
    public string ClassTwoID { get; set; }
    ...
}

我有IEnumerable个实例。我想返回一个List<ClassOne>,该ClassOne仅包含其中ClassOneID等于来自第二个ClassTwoID ClassTwo IEnumerablevar list = new List<ClassOne>(); list.AddRange(classOneEnumerable.Where(o => classTwoEnumerable.Select(c => c.ClassTwoID == o.ClassOneID).First())); 项的{{1}}项{{1}}实例(如果这是有道理的!)。我在想以下几点:

{{1}}

这个逻辑包含在构建/测试几天之后的代码中,所以我实际上还不能运行它。我不确定我提出的是否真的是正确的,并希望如果我弄错了,有人可以把我弄错。

3 个答案:

答案 0 :(得分:3)

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

两个查询都会产生相同的结果。

答案 1 :(得分:3)

如果您可以处理O(n2),现有答案就可以了。否则,我会对内部值进行排序,以便您获得n log(n)性能。

答案 2 :(得分:1)

试试这个

var list = classOneEnumerable.Where(o => classTwoEnumerable
                                  .Any(c => c.ClassTwoID == o.ClassOneID)))
                             .ToList();