저는 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.
}
오류에 문제가 있습니다 : 문이 어디에 - "문자열이 '필드'에 대한 정의가 포함되어 있지 않습니다 최고의 확장 메서드 오버로드 'System.Data.DatarowExtensions.Field는 일부 잘못된 인수가'.
는이 코드? 아니면 내가 포함하여 비슷한 이름을 찾을 수있는 다른 방법을 좀 도와 주시겠습니까.
Noxor - 위의 솔루션에 감사드립니다. 올바른 방향으로 나아갑니다. 나는 "John Matt Smith"이고 다른 기록은 "John Matthew Smith"인 같은 이름의 두 사람의 이름을 가지고 있는데, 나는 그들이 같은 사람이라는 것을 알고 있으므로 그들 중 하나를 지우고 싶다. 이것이 이유입니다. Any 대신 Contains를 사용하려고했습니다.이 링크에 대한 링크 : "https://stackoverflow.com/questions/23526773/what-is-the-difference-between-contains-and-any-in- linq ". 비슷한 이름을 먼저 쿼리하여 목록에 넣을 수있는 방법이 있습니까? 이것을 더 일찍 명확히하지 않는 것에 대한 사과. –
나는 객체의 equal 메소드를 사용하고 있다고 생각한다. 그래서 당신은 그것을 대체 할 수있다. 그래서 비슷한 이름을 가진 객체는 true를 반환 할 것이다. 그러나 이것은 정말 나쁜 생각처럼 보입니다. 원래 컬렉션에서 "복제"레코드를 삭제하려면 문자열뿐만 아니라 복제 된 객체의 컬렉션을 유지하십시오. 내 대답을 편집하십시오. – Noxor
당신은 그들이 같은 사람임을 어떻게 알 수 있습니까? 사회 보장 번호와 같은 다른 재산이 있다면 이름 대신 그루핑하는 것이 더 좋을 것입니다. – Noxor