2010-02-11 3 views
2

다음과 같은 경우가 있습니다. "Id"가있는 항목 목록이 있습니다. 특정 ID로 항목을 검색하고 해당 값을 수정하고 컬렉션 순서를 유지해야합니다. 그렇게하는 가장 좋은 방법은 무엇입니까?IEnumarable 컬렉션에서 항목을 수정하고 순서를 유지하는 방법

var collection = <some_linq_query> 

collection.Where(i=>i.Id=someId).FirstOrDefault().Property = "bla"; 

// now collection should be the same but the item updated. 
+0

작동중인 LINQ 쿼리 란 무엇입니까? – SLaks

+0

ToDictionary는 순서를 유지하지 않으므로 원하지 않습니다. 구문은 다음과 같습니다. 사전 result = collection.ToDictionary (x => x.Id); –

답변

2

Where를 호출해도 어떤 식 으로든 collection에 저장된 원래 LINQ 쿼리가 수정되지 않습니다. 대신 원래 쿼리의 하위 집합 인 새 IEnumerable<T>을 만듭니다. 부분 집합은 원래 집합과 같은 상대 순서를 갖습니다. collection

값이 collection 인 LINQ 값이 Where 절을 포함하거나 다른 값으로 필터링되는 경우 값을 기준으로하는 경우에만 문제가 발생할 수 있습니다 Property입니다. 이 경우에 .ToList를 통해 주문 강제 수집을 비 게으적 평가 구조로 유지하려고합니다.

collection = collection.ToList(); 
+0

감사합니다. 추가 점 ToDictionary (..) 메서드에 대한 속성을 사용하는 예제를 게시 할 수 있으면 : D – Javaa

1

컬렉션의 개체가 변경 가능하면 코드가 올바르게 작동해야합니다.

그런데 FirstOrDefault은 선택적 필터 매개 변수를 사용하므로 collection.FirstOrDefault(i => i.Id == someId)을 쓸 수 있습니다.

+0

var 항목 = collection.Where (i => i.Id = someId)를 추가하면 생각하지 않습니다 .FirstOrDefault(); 디버거로 그 위에 마우스를 가져 가면 속성은 이전 값입니다. – Javaa

+0

컬렉션에'struct's가 들어 있습니까? – SLaks

+0

구조체가 없으므로 필터 팁을 가져 주셔서 감사합니다! – Javaa

관련 문제