2017-12-30 70 views
0

그룹화 할 개체 목록이 있습니다. 객체 목록 매개 변수를 가지고 있고, 그룹화 동안이 같은 목록의 합 만들고 싶어 : 나는 다음과 같은 한 지금 LINQ를 사용하기 위해linq을 사용하여 그룹화 및 합계 <int> (우편 번호)

for(int i=0;i<MyList1.Count();i++) 
{ 
StatutOperations[i]=StatutOperations1[i]+StatutOperations2[i]... 
} 

을 :

liste_rep = liste_rep.GroupBy(l => l.Nom) 
        .Select(cl => new Repere 
        { 
         Quantite = cl.Sum(c => c.Quantite), 
         IdAff = cl.First().IdAff, 
         ID = 0, 
         ListeOperations = cl.First().ListeOperations, 
         StatutOperations = cl.Zip(StatutOperations)//First().StatutOperations 

        }).ToList(); 

라인 만드는 문제는 마지막으로, 나는 두 테이블을 합산하기 위해 Zip 함수를 사용하는 방법을 찾았지만 List를 그룹화하는 데 사용하려면 어떻게해야합니까?

편집 : StatusOperations는 정수 목록입니다. 구체적으로 liste_rep는 세부 정보 목록이고 세부 정보에는 n 개의 작업 목록이 있으며 StatusOperations에는 각 작업에 대해 얼마나 세부 정보가 작동되었는지가 결정됩니다.

예 : ListOperations는 = CUT, DRILL는 StatusOperations의 = 20,20,10

이 내가 그룹에 점점 세부 사항의 목록을 원하는 20 개 세부 (20)가 천공되어, 절단 및 10 페인트 의미 페인트 각 작업에 대한 합계.

편집 2 : 나는 단지 그것을 자신에게 그룹을 어떻게 관리 할 수 ​​지금은

: StatutOperations는 INT의 목록입니다 경우

   liste_rep = liste_rep.OrderBy(p => p.Nom).ToList(); 
       if (liste_rep.Count()>1) 
       { 
        totalStatut = liste_rep[0].StatutOperations.ConvertAll(s => s = 0); 
        string oldRep = ""; 
        Repere repere = new Repere(); 
        foreach (Repere rep in liste_rep) 
        { 
         if (rep.Nom!=oldRep) 
         { 
          newListRep.Add(repere); 
          repere = new Repere(); 
          repere.Nom = rep.Nom; 
          repere.StatutOperations = rep.StatutOperations; 
         } 
         else 
         { 
          repere.StatutOperations=repere.StatutOperations.Zip(rep.StatutOperations, (x, y) => x + y).ToList(); 
         } 
         oldRep = rep.Nom; 
        } 
       } 
+0

'StatutOperations'이 무엇인지 설명하십시오. 다른 테이블과 원하는 출력의 샘플 데이터를 보여줍니다. 'Zip'은 아이템의 인덱스로 두 개의 콜렉션을 결합하는데 사용됩니다 - 첫 번째는 두 번째, 두 번째는 ... –

+0

어떤 에러가 나옵니까? – derloopkat

+0

Gilad Green 글을 편집했습니다. derloopkat 아직 좋은 구문을 얻지 못해서 오류 메시지가 없습니다. –

답변

1

당신이

을 사용할 수 있습니다).

마지막 줄에 사용하십시오. StatutOperations = cl.Aggregate (opl1, opl2) =>
{return opl1.StatutOperations.Zip (opl2.StatutOperations, (opin1, opin2) => opin1 + opin2) .ToList();});

위의 코드에서 집계는 두 요소를 통해 실행되며 합계 (op1 + op2)로 집계됩니다.

참고 : 목록에 둘 이상의 요소가 포함되어있는 경우에만 집합을 사용하십시오. . 편집 : 죄송합니다. 이것은 repere 유형 객체에 집계를 적용하므로 예상되는 반환 값은 Repere type 일 것입니다.

이제 내 코드를 편집 했으므로 이제는 잘 작동합니다.

+0

안녕하세요, 답변 주셔서 감사합니다,하지만 작동하지 않는, 나는 두 가지 오류가 있습니다 1) 목록을 (그것은 내 개체입니다) Repere 변환 할 수 없습니다, 2) lamda 표현을 변환 할 수 없습니다. 정보를 얻으려면 내 목록에 1 ~ 수백 개의 요소가 있어야합니다 (일반적으로 여러 개이지만 한 요소 만 존재할 수 있습니다). –

+0

안녕하세요 한 요소에 대해 당신은 0 인덱스와 마찬가지로 직접 지정할 수 있습니다 –

+0

또한 편집 2가 추가되었습니다. –