[英]C# Create a list of objects from an 2 IEnumerable instances containing only those objects with a value found in the second list
I have 2 different classes: 我有2个不同的班级:
public class ClassOne
{
public string ClassOneID { get; set; }
...
}
public class ClassTwo
{
public string ClassTwoID { get; set; }
...
}
I have IEnumerable
instances of each. 我每个都有
IEnumerable
实例。 I want to return a List<ClassOne>
that contains only the ClassOne
items whose ClassOneID
is equal to the ClassTwoID
of a ClassTwo
object from the second IEnumerable
instance (if that makes sense!). 我想返回一个
List<ClassOne>
仅包含ClassOne
项目,其ClassOneID
等于ClassTwoID
一个的ClassTwo
从第二对象IEnumerable
实例(如果是有道理的!)。 I was thinking the following: 我在想以下几点:
var list = new List<ClassOne>();
list.AddRange(classOneEnumerable.Where(o =>
classTwoEnumerable.Select(c => c.ClassTwoID == o.ClassOneID).First()));
This logic is contained within code that is some days off building/testing, so I am not actually able to run it just yet. 此逻辑包含在可能需要构建/测试几天的代码中,因此我实际上还不能运行它。 I am not sure if what I have come up with is actually correct, and was hoping someone could put me right if I am mistaken.
我不确定我提出的建议是否正确,并希望有人能在我弄错的情况下纠正我。
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();
Both queries will yield the same results. 这两个查询将产生相同的结果。
The existing answers are fine if you can handle O(n 2 )
. 如果您可以处理
O(n 2 )
那么现有的答案就很好。 Otherwise I would sort the inner values so that you can get n log(n)
performance. 否则,我将对内部值进行排序,以便获得
n log(n)
性能。
Try this 尝试这个
var list = classOneEnumerable.Where(o => classTwoEnumerable
.Any(c => c.ClassTwoID == o.ClassOneID)))
.ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.