我是Linq的新手,仍然试图熟悉它。我有以下LINQ查询找到重复和它完美的作品象下面这样:使用LINQ与包含 - 获取错误
//“MergedName”是数据列,我查询,并找到重复的名称。
var duplicates = result.AsEnumerable()
`.Select(dr => dr.Field<string("MergedName").Replace("'", "''"))
.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(g => g.Key)
.ToList();
foreach (string duplicate in duplicates.ToArray())
{
// Logic to keep one and delete another duplicate.
}
现在,我想要在同一列“MergedName”上找到类似名称。 对于如:约翰·史密斯和约翰·史密斯小 我写的东西用。凡条款,但事情是错我的语法
var duplicates = result.AsEnumerable()
.Select(dr => dr.Field<string>("MergedName").Replace("'", "''"))
.Where(C => C.Field<string>("MergedName").ToLower().IndexOf(C.Field<string>("MergedName").ToLower().Trim()) != 1)
.Select(g => g.Key)
.ToList();
foreach (string duplicate in duplicates.ToArray())
{
// Logic to keep one and delete another duplicate.
}
错误:WHERE语句 - “字符串不包含定义‘现场’和最佳推广方法重载“System.Data.DatarowExtensions.Field有一些无效的参数”。
能否请你帮我这个代码吗?或任何其他方式在那里我可以使用包含找到相似的名称。
Noxor - 感谢您对以上解决方案,它可以帮助在正确的方向。我有两个名字,这两个名字在集合中是同一个人:“John Mat Smith”,另一个记录是“John Matthew Smith”,我知道他们是同一个人,所以想删除其中的一个。这就是原因,我正在寻找使用Contains而不是Any.Referred to this link:“https://stackoverflow.com/questions/23526773/what-is-the-difference-between-contains-and-any-in- LINQ”。有没有办法我可以先查询相似的名字并将它们放入列表中?对于之前没有澄清这一点抱有歉意。 –
我猜包含使用相同方法的对象,所以你可以重写,所以具有类似名称的对象将返回true。然而,这似乎是一个非常糟糕的主意。如果您想从原始集合中删除“重复”记录,请尝试保留重复对象的集合,而不是仅收集字符串。看到我的答案编辑。 – Noxor
你怎么知道他们是同一个人。如果你有其他一些财产,比如社会安全号码,最好用它来代替名字。 – Noxor