2012-10-31 6 views
1

목록을 구별 할 수있는 무언가를 작성하려고합니다. 얼마나 많은 사례가 발생했는지, 그리고 어쩌면 사건의 마지막 날짜에 대한 카운터와 같은 것입니다. 이것은 내가 지금까지 가지고있는 것입니다.IList 쿼리는 다른 IList 객체를 기반으로 하나의 객체를 수정합니다. 예를 들어 SQL에서 distinct를 사용합니다.

foreach(DataObject srcObj in ilSource){ 
    if (ilDest.All(x => x.Property1 != srcObj.Property1 || x.srcObj != srcObj.Property2)) 
     ilDest.Add(srcObj); 
    else 
     DataObject newObject = ilDest.SingleOrDefault(x => x.Property1 == srcObj.Property1 && x.Property2 == srcObj.Property2); 
     newObject.Propert3++; 
     newObject.Property4 = srcObj.Property5; 
} 

개체가 컬렉션 내에서 다시 설정되지 않기 때문에 다음 반복이 발생하면 newObject 속성이 유지되지 않습니다. Linq가 없으면 컬렉션을 수동으로 반복하고, 객체를 잡고 변경하고 다음 객체로 이동합니다. 왜냐하면 객체의 실제 사본이 있기 때문입니다. 당신이

+0

귀하의 질문이 무엇인지 명확하게 설명해 주시겠습니까? –

+1

또한 - 질문 제목에 태그를 넣을 필요가 없습니다. 나는 앞서 가서 Linq을 제거했다. –

+3

중괄호가 없으면'else' 바로 아래에있는 * first * 문만이 실제로'else' 블록에있는 것입니다. 맞습니까? –

답변

1

이것은 당신이 요구하는지의 최선 해석에 기여할 수있는 모든 도움을 사전에

감사합니다.

이 시도 : LINQ 쿼리가 아닌 업데이트에 대해 같이

var query = 
    from srcObj in ilSource 
    orderby srcObj.Property5 
    group srcObj by new 
    { 
     srcObj.Property1, 
     srcObj.Property2, 
    } into gs 
    select new 
    { 
     First = gs.First(), 
     Last = gs.Last(), 
     Count = gs.Count(), 
    }; 

foreach (var x in query) 
{ 
    x.First.Property3 = x.Count; 
    x.First.Property4 = x.Last.Property5; 
} 

var ilDest = query 
    .Select(x => x.First) 
    .ToList(); 

기존 개체의 수정은 foreach 루프를 필요로한다.

그럼에도 불구하고 코드를 "고정"하여 내 대답이 동일한 결과를 만들어 냈습니다. 고정 코드는 다음과 같아야합니다.

foreach(DataObject srcObj in ilSource) 
{ 
    if (ilDest.All(x => 
      x.Property1 != srcObj.Property1 || x.Property2 != srcObj.Property2)) 
     ilDest.Add(srcObj); 
    else 
    { 
     DataObject newObject = ilDest.SingleOrDefault(x => 
      x.Property1 == srcObj.Property1 && x.Property2 == srcObj.Property2); 
     newObject.Property3++; 
     newObject.Property4 = srcObj.Property5; 
    } 
} 
+0

처음부터 질문이 명확하지 않았 음을 사과드립니다. 도움을 주셔서 감사 드리며 내가 갖고있는 질문에 답변을드립니다. –