C# 如何根据另一个列表筛选一个列表?
我目前正在使用LINQ和一个自定义对象,老实说,我有点被卡住了。我有一个代表个人的自定义类。看起来是这样的: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
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