2014-04-16 4 views
0

컬렉션의 항목을 반복하는 foreach 루프가 있습니다. 해당 항목이 이미 존재하는 경우 요소의 속성을 다시 사용할 수 있습니까? 예 :컬렉션의 항목 재사용

foreach(example item in creditItems) 
{ 
    item.Total += item.Quantity; 
} 

creditItems에는 3 개의 항목이 있다고 가정 해 봅시다. 첫 번째 항목과 세 번째 항목은 동일하며, 최소한 있어야합니다. 문제는 완전히 다른 항목으로 간주된다는 것입니다. 이 문제는 마지막 항목까지 반복 할 때 item.Quantity은 원래 item.Total에 추가되지 않으므로 새 항목으로 간주되기 때문에 합계는 0 + item.Quantity입니다. 내 논리가 방금 꺼 졌나요?

+0

나는 이것이 가능하다고 생각하지 않을 것입니다. 아마도 합계 또는 linq 문을 수행하는 별도의 변수를 사용하는 것입니다. – webdad3

+0

* item.Quantity는 원래 항목에 추가하지 않습니다. 왜냐하면 새 항목으로 간주되기 때문입니다 - * 그러면 * 새로운 * 즉, 다른 개체입니다. 귀하의 요구 사항 인 경우 각 항목이 논리적으로 고유하다는 전제를 확보해야합니다. 그렇지 않으면 어디서나 특별한 경우를 추가하게되고 코드가 엉망이됩니다. invariants를 최대한 빨리 적용하십시오. –

답변

0

당신이 정확하게 undestand, 당신은 두 개 이상의 목록, 배열에 "같은"항목을 가지고 ... 뭐든간에.

상품의 유형을 결정하는 ID가있는 상품을 말합니다. 10은 자동차, 11은 트럭 ... whaetever.

그런 다음이 작업을 수행하여이 ID에 의해 그룹에 해당 항목을 LINQ를 사용할 수 있습니다

var itemsGroupedById = creditItems.GroupdBy(item=> item.ID); 

foreach(var idGroup in itemsGroupedById) 
{ 
    decimal total = idGroup.Sum(item => item.Quantity); // This sums up all quantities of the same ItemId 
    foreach(var item in idGroup) 
     item.Total = total; // This makes sure all items of the same kind store the total 
    Console.WriteLine("The total of item {0} is {1}", idGroup.Key, total); 

} 
+0

이것은 내가 필요한 것입니다! 감사! 또한 다른 메모에서 GroupBy의 여러 속성은 어떻게됩니까? 아이템 외에도 .ID – user3542850

+0

http://stackoverflow.com/questions/5231845/c-sharp-linq-group-by-on-multiple-columns – CSharpie

0

첫 번째 및 세 번째 항목은 동일한 항목 일 수 있지만 같은 개체가 아닙니다. 아이템 ID 필드가 같을 수 있습니다.

같은 ID를 가진 두 항목이 컬렉션에 존재하지 않게하려면 컬렉션에 동일한 ID를 가진 두 항목이 없는지 확인하십시오. 동일한 ID를 가진 두 개의 아이템을 원할 경우이 케이스를 처리하는 방법을 결정해야합니다. 첫 번째 아이템을 업데이트합니까? 두 번째? 둘 다?

당신이하고 싶은 것을 결정하고 거기에서부터 구현은보다 직관적이 될 것입니다.

관련 문제