我有两个不同的类:
public class ClassOne
{
public string ClassOneID { get; set; }
...
}
public class ClassTwo
{
public string ClassTwoID { get; set; }
...
}
我有IEnumerable
个实例。我想返回一个List<ClassOne>
,该ClassOne
仅包含其中ClassOneID
等于来自第二个ClassTwoID
ClassTwo
IEnumerable
个var list = new List<ClassOne>();
list.AddRange(classOneEnumerable.Where(o =>
classTwoEnumerable.Select(c => c.ClassTwoID == o.ClassOneID).First()));
项的{{1}}项{{1}}实例(如果这是有道理的!)。我在想以下几点:
{{1}}
这个逻辑包含在构建/测试几天之后的代码中,所以我实际上还不能运行它。我不确定我提出的是否真的是正确的,并希望如果我弄错了,有人可以把我弄错。
答案 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();