在一个列表中查找元素,但不按其他顺序查找元素

时间:2016-10-18 06:56:47

标签: c# linq

我认为这是一个简单的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查询,为peopleList1peopleList2完全相同的顺序中的所有人提供帮助  这个例子应该给我三个人:

  

(ID = 1,2和3)

我尝试使用

peopleList1.Except(peopleList2)

但这对我的情况不起作用,因为我还要检查订单。列表1应包含与列表2完全相同的元素

3 个答案:

答案 0 :(得分:2)

我认为这应该是你想要的:

var result = peopleList1.Zip(peopleList2, (f, s) => f.ID != s.ID ? f.ID : 0)
                        .Where(c => c > 0).ToList();

Zip检查peopleList1peopleList2的相应元素,并生成一系列结果,这些元素存在于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()