2017-01-11 15 views
0

다음 쿼리는 GridView에 바인딩 할 수있는 <IGrouping<string, ItemsCollection>> 유형을 반환합니다. CollectionViewSource과 함께 사용하면 키 (그룹 이름으로)는 그룹 헤더/제목을 표시하는 데 사용됩니다 (예 :의 TextBlock에 바인딩하여 GridView 용).<IGrouping <string, ItemsCollection >>의 그룹화 키가 바인딩에 대한 그룹 수 정보와 함께 추가되도록 수정할 수 있습니까?

var query = from ItemObj in ItemsObjCollection 
orderby ItemObj.ItemName 
group ItemObj by ItemObj.GroupName into groups 
orderby groups.Key 
select groups; 

모든 예상대로 잘 작동하고 문제없이 지금까지된다.

내 다음 시도 (문제가있는 곳)는 그룹 항목 수를 제공하는 그룹 이름을 출력하는 Key (예 : "Group Name [count]")와 같은 Key에 대한 것입니다. count는 쿼리에서 groups.Count()로 쉽게 얻을 수 있습니다. ItemsObjCollection이 Fruits를 나타내면, 헤더 출력은 Apples [10], Bananas [7], Oranges [12] 등과 같은 것이 바람직합니다.

출력 표시 (바인딩을 통한)를 위해 그룹화 키를 설명한대로 그룹 수 정보가 추가되도록 수정할 수 있습니까? 기본적으로, 나는 Key = $"{groups.Key} [{groups.Count()}]"을 원하지만 쿼리 내에서 어떻게되는지 모른다.

select new { Key = $"{groups.Key} [{groups.Count()}]", Items = groups };

을하지만 내 수정 키는 지금까지하지 않았다, 바인딩에 표시되지 않습니다의 라인을 따라했습니다. 또한 그게 바로 인터페이스이기 때문에 IGrouping의 인스턴스를 만드는 것이 쉽지 않으며 위의 쿼리 문에서이를 수행하는 영리한 방법이 있기를 바랍니다. 누군가 이미이 작업을 수행 했어야합니다.

+0

문자열과 정수가 결합되어 있으므로 다음을 시도하십시오. select new {Key = groups.Key + groups.Count(). ToString(), Items = groups}; – jdweng

+0

그렇지 않습니다. 난 그냥 C# 6.0의 최신 문자열 보간 구문을 사용하고 그래서 당신이 말하고 무슨 말을 동등한 무엇입니까. 문자열 보간 기인 $ "{var} ..."을 참조하십시오. – user2921851

+0

귀하의 질의는 정상입니다. 바인딩은 어떻게됩니까? –

답변

1

해결되었지만 깔끔하지 않을 수 있습니다. 기본적으로 위의 쿼리 결과를 기반으로 새로운 쿼리를 만들었지 만 원하는대로 그룹화 키가 수정되었습니다. 이를 위해 새 그룹을 만드는 데 새로운 클래스가 필요했습니다.

public class NewGrouping<TKey, TElement> : List<TElement>, IGrouping<TKey, TElement> 
{ 
    public TKey Key { get; set; } 
} 

다음, 새로운 그룹이 이전 그룹을 반복에 의해 형성되었다 - Key = $"{grp.Key} [{grp.Count()}]" 등의 추가 정보로 수정 키와 그 과정에서. 의 GridView에 바인딩 봐라 대한

List<IGrouping<string, ItemsObjCollection>> newQuery = new List<IGrouping<string, ItemsObjCollection>>(); 

foreach (var grp in query) 
{ 
    NewGrouping<string, ItemsObjCollection> newGroup = new NewGrouping<string, ItemsObjCollection>() { Key = $"{grp.Key} [{grp.Count()}]" }; 
    newGroup.AddRange(grp.ToList()); 

    newQuery.Add(newGroup); 
} 

사용 newQuery 대신 query! 예상대로 작동합니다.

추신 : 나는 왜 사람들이 내 질문에 대해 덜 유용하거나 연구 적이라고 생각하는지 궁금하다. 이것은 사소한 질문이 아니며 아마도 그 사람이 그 질문을 이해하지 못했을 것입니다.

0

이미 있습니다. group.Count입니다.