C# 使用LINQ在表中查找类似记录
我试图在一个表中查找同名姓氏的人,到目前为止,我已经编写了这个LINQ查询。这个查询给我一个交叉连接结果。有人能帮我删除类似的结果集吗?C# 使用LINQ在表中查找类似记录,c#,entity-framework,linq,C#,Entity Framework,Linq,我试图在一个表中查找同名姓氏的人,到目前为止,我已经编写了这个LINQ查询。这个查询给我一个交叉连接结果。有人能帮我删除类似的结果集吗? 我想在网格中显示匹配的记录,用户可以打开每个记录的详细信息,看看它们是否真的重复,然后对其采取行动 对于eg 考虑一个人的身份证号码 目前的结果是 (1,2) (1,3) (2,1) (2,3) (3,1) (3,2) 我希望结果是(1,2) (1,3) (2,3) 以下是您应该如何搜索同名人员: from p in db.People group p b
我想在网格中显示匹配的记录,用户可以打开每个记录的详细信息,看看它们是否真的重复,然后对其采取行动 对于eg
考虑一个人的身份证号码 目前的结果是 (1,2) (1,3) (2,1) (2,3) (3,1) (3,2)
我希望结果是(1,2) (1,3) (2,3)
以下是您应该如何搜索同名人员:
from p in db.People
group p by new { GivenName = p.GivenName.Trim(), Surname = p.Surname.Trim() } into g
where g.Count() > 1 // this condition filters out people without duplicates
select new {
Name = g.Key,
Duplicates = g.ToList() // here you will get people with same name
}
如果您只想获取重复人员的ID,可以使用Duplicates=g.Select(p=>p.PersonID).ToList()
。ids中不会有任何重复。例如,如果第1、2和3个人的名字都是约翰·多伊,那么你将得到
{
Name: { GivenName: "John", Surname: "Doe" },
Duplicates: [1, 2, 3]
}
如果需要,您可以使用这些ID进行任何排列。例如,您可以使用两个循环:
private static IEnumerable<Tuple<T,T>> GetPermutations<T>(params T[] values)
{
for (int i = 0; i < values.Length - 1; i++)
{
for (int j = i + 1; j < values.Length; j++)
yield return Tuple.Create(values[i], values[j]);
}
}
注意:每次从数据库中读取名称时,不要考虑修剪名称,而是考虑将修剪值设置为数据库。为什么预期结果仍然包含重复项
1,2 1,3 2,3
?这些数字可以被视为个人id。我想将它们全部显示在一个网格中,用户可以打开每个数字的详细信息,查看它们是否真的重复,然后采取行动。谢谢,我将尝试
private static IEnumerable<Tuple<T,T>> GetPermutations<T>(params T[] values)
{
for (int i = 0; i < values.Length - 1; i++)
{
for (int j = i + 1; j < values.Length; j++)
yield return Tuple.Create(values[i], values[j]);
}
}
GetPermutations(1, 2, 3) // returns (1,2) (1,3) (2,3)