2013-11-23 2 views
2

MVC4에서 IGrouping을 사용하려면 많은 것을해야합니다. C#.빈칸은 어떻게됩니까?

 var b = a.GroupBy(x => x.Title ?? "unknown", c => new MyClass2 
     { 
      Title2 = c.Title, 
      Id2 = c.Id, 
      OtherId2 = c.OtherId, 
      Number2 = c.Number 
     }); 

// 위의 수익률이 예상대로 예상대로 다음 내 쿼리

 var a = (from r in db.SomeProcedure(Id) 
         select new MyClass1 
         { 
          Id= r.Id, 
          Title = r.Title, 
          Name = r.Name, 
          Number = r.Number, 
          Product = r.Product, 
          OtherId = r,OtherId 
         }).ToList(); 

// 위의 반환 (13 개) 결과입니다

 List<MyClass1> mClass1 = a; 
     List<IGrouping<string,MyClass2>> mClass2 = b.ToList(); 

// 2 개의 위의 동일 예상대로

마지막으로

 mPrivateClass1.Clear(); 
     mClass1 .ForEach(o => mPrivateClass1.Add(o)); 

// 위는

 mPrivateClass2.Clear(); 
     mClass2 .ForEach(p => mPrivateClass2.AddRange(p)); 

예상대로 13 // 상기 예상하지 13 2를 반환한다. Add (p)를 사용하여 일반 목록 <을 제공 할 수 없습니다.> 일부 잘못된 인수가 있습니다.

mPrivateClass1 is a: 
private List<MyClass1> mPrivateClass1 = new List<MyClass1>(); 

mPrivateClass2 is a: 
private List<MyClass2> mPrivateClass2 = new List<MyClass2>(); 

답변

1
mPrivateClass2.Clear(); 
mClass2 .ForEach(p => mPrivateClass2.AddRange(p)); 
//The above is returning 13 not 2 as expected. 

왜 당신은 두 요소 만 반환 하시겠습니까? AddRange을 사용하고 있으므로 전체 그룹 콘텐츠가 List에 추가되고 IGrouping<TKey, TElement>IEnumerable<TElement>을 구현하므로 해당 그룹으로 분류 된 모든 요소가 13이됩니다. 코드에 예상되는 원하는 값입니다.

mPrivateClass2에서 2 개의 요소 만 가져 오려면 그룹의 어떤 요소를 추가해야하는지 결정해야합니다. 예를 들어, 다음 각 그룹의 사용에서 첫 번째 항목을 추가하려면 :

mClass2.ForEach(p => mPrivateClass2.Add(p.First())); 

당신은 IGrouping 내용을 정렬, OrderBy 같은 다른 방법을 추가 할 수 있습니다 하나 개의 항목 복용하기 전에 :이

mClass2 .ForEach(p => mPrivateClass2.Add(p.OrderBy(x => Id).First())); 
+0

제목을 패널에 넣으므로 두 개의 제목이 처음이므로 첫 번째 쿼리의 결과는 하위로 표시됩니다. – user1307149

1

mClass2에 2 개의 그룹이 있어도 두 그룹에 13 개의 요소가 결합되어 있기 때문에 mPrivateClass2.AddRange으로 전화하면 IEnumerable<MyClass2>으로 추가됩니다.

각 그룹의 두 요소 (MyClass2)를 추가 하시겠습니까?

관련 문제