2011-01-28 4 views
1

나는 다음과 같은 표현 LINQ의 동네 짱 - 차가움이 작업을 설정할 사용하고 싶습니다 (제외 교차를) 작동하지 :LINQ 설정 조작

설정 작업이 빈 할당 목록과 작성 가능한 목록을 초래할 동안 내가 foreach는 접근 방식이 제대로 내 목록을 채우고이 예제를 실행 할 때마다
var assigned = user.Groups.Intersect(groups); 
var available = groups.Except(user.Groups); 

. 평등 검사와 관련하여 문제가되어야한다고 생각했지만 Contains()가 일하는 것이 잘못되었음을 증명합니다. 누군가 내 오해를 여기에서 볼 수 있도록 도와 줄 수 있습니까?

는 단지 정보가 도움의 것을 경우, LINQ 쿼리의 결과 인 IEnumerable을 그룹

...

+0

자신의 방법을 '포함하고 있습니까?'또는 제공합니까? – leppie

+0

제공, 개인 취향이 여기에 –

+0

교차로에 대한 차이를 만들지 않습니다. 제외하지 않았으므로 시도하지 않았습니다. 의미가 없기 때문입니다. –

답변

2

글쎄, 그것은 차이를 만들 수 있지만한다의 관점에서 대칭보기 나는 어떻게 당신이 assigned을 생성하는지 역전시킬 것이다. 또한 쿼리가 한 번만 실행되고 있는지 확인하십시오 것, 나머지 작업의 프로세스 일어난다 :

var cachedGroups = groups.ToList(); 
var assigned = cachedGroups.Intersect(user.Groups); 
var available = cachedGroups.Except(user.Groups); 

하나의 가능성은 user.Groups 사용자 지정 같음 비교를 가지고 있다는 것입니다. 그 이 foreach 버전이 작동하지만 LINQ 버전이 작동하지 않은 이유를 설명합니다. user.Groups의 유형은 무엇이며, 사용하는 평등 비교 자에 대해 얼마나 알고 있습니까?

+0

user.Groups는 BindingList 클래스를 기반으로하는 사용자 지정 형식입니다. 나는리스트의 Equality Comparator가 왜 차이를 만들지 당신을 따라갈 수 없다. (엘리먼트는 엘리먼트에 의해 엘리먼트가 발생하지 않느냐?) 그러나 나는 에 커스텀 엘리먼트가 있는지 확실히 말할 수있다. –

+0

죄송합니다. 실수 : user.Groups가 ObservableCollection 입니다. 나머지는 –

+0

@Sebastian 이전에 말했듯이 유효합니다 :'user.Groups'가 커스텀 동등 비교자를 가지고 있다면'Contains'에서 Intersect와 Except가 사용하는 기본 비교 자보다 다른 대답을 줄 수 있습니다. –