我是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