2010-03-08 5 views
1

개체 목록의 속성이 모든 개체에 대해 동일한 지 알아 내려고 할 때 이상한 예외가 발생했습니다.컬렉션이 수정되었습니다 예외 linq-to-objects

bool lvNoGuests = pvBillData.Reservering.Dagen.All(x => 
{ 
    return x.AantalKinderen == pvBillData.Reservering.Dagen[0].AantalKinderen && 
      x.AantalVolwassenen == pvBillData.Reservering.Dagen[0].AantalVolwassenen 
}); 

아이디어는 목록의 모든 구성원 목록의 첫 번째 항목으로 두 가지 속성에 대해 동일한 값을 가지고 있는지 확인하기 위해 .ALL을 사용하는 것입니다

이 내 코드입니다.

속성은 단순한 getter (자동 속성 아님)이며 아무 것도 수정하지 않습니다.

이 코드를 실행하면 InvalidOperationException이 발생합니다. "컬렉션이 수정되었으므로 열거 연산이 실행되지 않을 수 있습니다."

누구나 단서가 있습니까?

목록은 genericht .net 목록이 아니지만 XPCollection (DevExpress의 XPO 프레임 워크) 유형입니다.

+0

을 그래서 당신은 DevExpress의 XPO LINQ 구현 객체에 만에 LINQ를 처리하지 않는? – Steven

+0

나는 linq에 대해 잘 모르겠지만, linq을 사용하여 즉석에서 데이터베이스를 쿼리하지 않기 때문에 일반 linq-to-object라고 생각하지만 캐시 된 XPO 객체를 쿼리합니다. 내부적으로 DB에서 캐싱 및 다시로드하는 멋진 목록입니다. – Henri

답변

3

모든 간단한 게터인가? 심지어 Dagen? 나는 단지 펑키 한 일이 일어나고 있다고 가정 할 수 있습니다. 아마도 동적 인 타입 생성과 당신이 코드에서 보지 못하는 무언의 오버 라이드를 가지고 있습니다 - 멤버는 virtual입니까?). 그러나 은 내가 변수로 내역을 잡아 시도 할 것입니다 수정 :

var first = pvBillData.Reservering.Dagen.First(); 
var kinderen = first.AantalKinderen; 
var volwassenen = first.AantalVolwassenen; 
bool lvNoGuests = pvBillData.Reservering.Dagen.All(
    x => x.AantalKinderen == kinderen && x.AantalVolwassenen == volwassenen); 
+0

죄송합니다. Marc, 나는 이걸로 당신을 이겼습니다 ;-) – Steven

+0

@Steven - 참으로 (+1),하지만 적어도 어떤 일이 벌어지고 있을지 생각해 보았고, 람다를 단순화 시켰습니다 .-p –

+0

.Dagen은 정말로 조건을 가지고있었습니다. DB에서 목록을 다시로드하게 만든 getter에서 @Steven, 죄송합니다. 귀하와 Marc이 동일하다고 말씀 하셨지만, 조금 더 명확한 답변을 드리겠습니다. – Henri

3

이 시도 :

var eersteDag = pvBillData.Reservering.Dagen[0]; 
var verwachtAantalKinderen = eersteDag.AantalKinderen; 
var verwachtAantalVolwassenen = eersteDag.AantalVolwassenen; 

bool lvNoGuests = pvBillData.Reservering.Dagen.All(x => 
{ 
    return x.AantalKinderen == verwachtAantalKinderen && 
      x.AantalVolwassenen == verwachtAantalVolwassenen 
});