C# 如何根据另一个列表筛选一个列表?

C# 如何根据另一个列表筛选一个列表?,c#,linq,C#,Linq,我目前正在使用LINQ和一个自定义对象,老实说,我有点被卡住了。我有一个代表个人的自定义类。看起来是这样的: private class Person { private String Name; private String Firstname; } SELECT * FROM Person1 WHERE Person1.NAME IN (SELECT Person2.Name FROM Person2 WHERE Perso

我目前正在使用LINQ和一个自定义对象,老实说,我有点被卡住了。我有一个代表个人的自定义类。看起来是这样的:

private class Person
{
    private String Name;
    private String Firstname;

}
SELECT * FROM Person1 
WHERE Person1.NAME IN (SELECT Person2.Name FROM Person2
                       WHERE Person2.Name=Person1.Name 
                       AND Person1.Firstname<>Person2.Firstname)
现在想象以下情况:我有两个personperson1和Person2数组。我想为其他属性获取列表2中名称相同但列表1中不存在的那些属性的列表

例如:

List<Person> Person1=new List<Person>(){new Person(){Name="Marley", Firstname="Bob"},
                                    new Person(){Name="Smith", Firstname="David"},
                                    new Person(){Name="Smith", Firstname="Thomas"},
                                    new Person(){Name="Flint", Firstname="John"}};

List<Person> Person2=new List<Person>(){new Person(){Name="Marley", Firstname="Bob"},
                                    new Person(){Name="Smith", Firstname="David"},
                                    new Person(){Name="Smith", Firstname="Thomas"},
                                    new Person(){Name="Smith", Firstname="Sandy"},
                                    new Person(){Name="Smith", Firstname="Catherine"},
                                    new Person(){Name="Flint", Firstname="John"},
                                    new Person(){Name="Simons", Firstname="Paul"},
                                    new Person(){Name="Flint", Firstname="Rachel"}};
在SQL中,查询如下所示:

private class Person
{
    private String Name;
    private String Firstname;

}
SELECT * FROM Person1 
WHERE Person1.NAME IN (SELECT Person2.Name FROM Person2
                       WHERE Person2.Name=Person1.Name 
                       AND Person1.Firstname<>Person2.Firstname)
结果将是桑迪/凯瑟琳·史密斯和瑞秋·弗林特,而不是保罗·西蒙斯


在Linq中我怎么能做到这一点呢?

您说您希望所有人都具有相同的名字,但不是相同的名字,但是您的sql查询会查找所有具有相同名字但不同名字的人

如果需要Person1中的所有人,根据姓名也在Person2中,但名字不同:

var query = Person1
    .Where(p => Person2
        .Any(p2 => p2.Name == p.Name && p2.Firstname != p.Firstname));
如果需要列表,请使用query.ToList;如果需要数组,请使用query.ToArray

如果您想从Person2获得所有信息:


到目前为止你试着做什么?您尝试的解决方案存在哪些问题?您对如何在LINQ中执行这些操作做了哪些研究?它们以何种方式未能解决您的问题?欢迎使用堆栈溢出!为了在这里获得最好的帮助,你需要在问题中添加你测试过的内容以及它是如何失败的。你检查过结果了吗?@Jonesy:我已经看过了要求。你有预约吗?如果OP想找到名字相等但名字不同的所有人,那么很容易改变。根据他的测试数据,我得到了David Smith、Thomas Smith和JohnFlint@Jonesy:是的,因为第二个列表中的所有名称都不同。Bob Marley也在第二个列表中,但同名+名。如果您查看他的sql查询,您会发现他使用了SELECT*FROM Person1。桑迪/凯瑟琳·史密斯不在人身上,而在人身上。也许我当时误解了。OP的预期输出当然不同,但整个问题实际上是tossup