IGrouping에서 "Value"속성 가져 오기


141

나는 같은 데이터 구조를 가지고있다

public DespatchGroup(DateTime despatchDate, List<Products> products);

그리고 나는 노력하고 있습니다 ...

var list = new List<DespatchGroup>();

foreach (var group in dc.GetDespatchedProducts().GroupBy(i => i.DespatchDate))
{
    // group.Values is not correct... how do I write this?
    list.Add(new DespatchGroup(group.Key, group.Values);
}

IGrouping그룹 내 데이터 레코드에 실제로 도달하는 방법을 볼 수 없으므로 분명히 이해 하고 있지 않습니다!


1
편집 (Rev2) 은 답변과 일치하지 않으므로 매우 건설적이지 않았습니다.
Sunny Patel

답변:


170

그룹은 다음을 구현 IEnumerable<T>합니다. 일반적 으로을 호출 foreach하십시오 group. 경우 에는 다음이 필요합니다 List<T>.

list.Add(new DespatchGroup(group.Key, group.ToList());

그래서 기본적으로 우리는 문제의 본질을 다음과 같은 경우은 value에 비교할 ToList()만이 더 오버 헤드의 단지 값 철수에 반대 목록에이 변환
협동 조합

2
@CodeBlend 그들은 목록을 원하기 때문에 더 많은 오버 헤드가 있습니다. Values그들이 상상했던 것과 같은 재산 이 있다면 그들은해야 할 것 group.Values.ToList()입니다. 반대로 목록 대신 열거 가능한 항목을 수락하면 new DespatchGroup(group.Key, group)작동합니다. 오버 헤드는 DespachGroupIGrouping이 작동하는 방식 이 아니라는 정의 때문입니다 .
Jon Hanna

35

더 없습니다 Values때문에 재산 또는 유사한 IGrouping<T>자체 입니다IEnumerable<T> 값의 순서가. 이 경우에 필요한 것은 해당 순서를 목록으로 변환하는 것입니다.

list.Add(new DespatchGroup(group.Key, group.ToList());

6
다음과 같은 경우 IEnumerable로 변환 할 수도 있습니다 group.AsEnumerable().
Mateen Ulhaq

22

선택한 그룹에 대해 전화를 걸 수 있습니다

var selectedGroupValues=selectedGroup.SelectMany(x=>x);

2
감사! .Select어떤 것과 달리 IGrouping <>을 다시 .SelectMany반환하면 그룹화 된 값 유형의 IEnumerable을 반환합니다.
K0D4 18.53에 18.53.

여러 그룹이 선택되었을 때만 이것을 사용한다고 말하고 싶습니다. (일명 IEnumerable<IGrouping<key,DespatchGroup>>). 그렇지 않으면을 사용 toList()하거나 간단히 캐스트하십시오 IEnumerable<DespatchGroup>.
사과 사과

21

다른 답변에서 알 수 있듯이 사용할 수있는 특정 색인에 액세스 해야하는 경우 그룹화는 IEnumerable group.ElementAt(i)입니다.

이것은 아마도 많은 사람들에게 명백 할 것이지만 희망적으로는 몇 사람을 도울 것입니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.