我认为这是一个简单的LINQ查询,我只是不确定如何。请参阅下面的代码段,评论解释了我想做的事情:
class Program
{
static void Main(string[] args)
{
List<Person> peopleList1 = new List<Person>();
peopleList1.Add(new Person() { ID = 1 });
peopleList1.Add(new Person() { ID = 2 });
peopleList1.Add(new Person() { ID = 3 });
List<Person> peopleList2 = new List<Person>();
peopleList2.Add(new Person() { ID = 2 });
peopleList2.Add(new Person() { ID = 1 });
peopleList2.Add(new Person() { ID = 4 });
peopleList2.Add(new Person() { ID = 3 });
peopleList2.Add(new Person() { ID = 5 });
}
}
我想执行一个LINQ查询,为peopleList1
中peopleList2
以完全相同的顺序中的所有人提供帮助
这个例子应该给我三个人:
(ID = 1,2和3)
我尝试使用
peopleList1.Except(peopleList2)
但这对我的情况不起作用,因为我还要检查订单。列表1应包含与列表2完全相同的元素
答案 0 :(得分:2)
我认为这应该是你想要的:
var result = peopleList1.Zip(peopleList2, (f, s) => f.ID != s.ID ? f.ID : 0)
.Where(c => c > 0).ToList();
Zip
检查peopleList1
和peopleList2
的相应元素,并生成一系列结果,这些元素存在于peopleList1
但不存在于peopleList2
中{1}}完全相同的顺序。
答案 1 :(得分:2)
在.NET中,List<T>
类型由数组支持,因此使用LINQ执行此操作的最有效方法是使用Select
的重载also accesses the index:< / p>
peopleList1.Where((person, index) => peopleList2[index].Id != person.Id);
答案 2 :(得分:1)
这应该
peopleList1.Where(x=>peopleList2.Count<peopleList1.IndexOf(x)+1||peopleList2[peopleList1.IndexOf(x)].ID!=x.ID).ToList()