동일한 기본 클래스에서 상속하는 4 개의 클래스가 있습니다. 그들은 모두 공통적으로 Path 속성이 &입니다. 내 데이터가 XML에서로드되면이 클래스를 기반으로 4 개의 목록을 작성합니다.linq을 사용하여 여러 목록에서 중복 된 항목 찾기
내가 나를 2 개에는 비교할 수 있습니다 다음과 같은 코드를 가지고 : 나는 다른 3 1 목록을 비교하려는
싶습니다
var list1 = settings.EmailFolders.Select(m => m.Path).ToList(). Intersect(settings.LogPaths.Select(m=>m.Path).ToList()).ToList();
하지만 및 중복 경로가 있는지 확인하십시오.
아무것도 발견되지 않으면 그때 두 번째 목록을 비교 같은 논리를 적용하고 그것을 비교할 다름이 발견되지 않으면, 그때 비교 같은 논리를 적용 할 2.
세 번째 목록을 비교하고 마지막 목록과 비교하십시오.
중복이 발견되면 관련 오류를보고하고 싶습니다. 점 1, 2 및 3은 단일 프로세스에서 원하지 않습니다.
내가 위의 내용을 다시 사용하고 추가 목록에 추가 Intersect
를 추가 할 경우,
var list1 = settings.EmailFolders.Select(m => m.Path).ToList().
Intersect(settings.LogPaths.Select(m=>m.Path).ToList()).
Intersect(settings.SuccessPaths.Select(m=>m.Path).ToList()).
Intersect(settings.FailurePaths.Select(m=>m.Path).ToList()).List();
위의 내가 원하는 아닌 or
연산자보다 각 오히려 사이에 and
연산자를 적용하고 싶습니다.
내가 @Devuxer 제안에 따라 답변에 내 질문에 업데이 트했습니다 : FailurePaths 또는 LogPaths 또는 SuccessPaths에 사용되는 경로 중 하나가 이미 UPDATE가
내 EmailFolder.Path에 사용하는 경우 내가 알 필요가 어떤 올바른 대답을하지만 문자열 배열 작업 대신, 나는 모든 Path
속성을 포함하는 클래스의 목록에 그것을 기반으로 해요. 위의 예에서 단순 위해, 나는 단지 관련 데이터를로드하지만 내 경우, 모든 데이터가 한 번에 직렬화 및로드되는 각 함수 내 목록을 선언 한 것을
List<EmailFolder> emailFolders = LoadEmailFolders();
List<LogPath> logPaths = LoadLogPaths();
List<SuccessPath> successPaths = LoadSuccessPaths();
List<FailurePath> failurePaths = LoadFailurePaths();
var pathCollisions = EmailFolders.Select(a=>a.Path)
.Intersect(LogPaths.Select(b=>b.Path))
.Select(x => new { Type = "LogPath", Path = x })
.Concat(EmailFolders.Select(c=>c.Path)
.Intersect(SuccessPaths.Select(d=>d.Path))
.Select(x => new { Type = "SuccessPath", Path = x }))
.Concat(EmailFolders.Select(e=>e.Path)
.Intersect(FailurePaths.Select(f=>f.Path))
.Select(x => new { Type = "FailurePath", Path = x })).ToList();
참고.
나는 당신이 제안한 것을 시도해야합니다. 그것은 나를 웃게했다 :) linq에서 할 수있는 것과 놀랍게도, 나는이 주제에 대해 잘 모르고있다. 정말 놀라운! 가지고있는 것은 좋지만 문자열 배열을 적용하는 대신 객체 목록에 적용하고 싶습니다. – Thierry
@Thierry, 상황에 맞는 예제를 만들려면 각 new 문에 대해'new {Type = "Email-Log", Path = x.Path}'할 수 있다고 생각합니다. – devuxer
완벽한! 그것은 매력을 작동! 각 질문에 Path 속성이있는 객체 목록을 사용하여 대답으로 내 질문을 업데이트합니다. 감사. – Thierry