2014-11-02 4 views
0

Я пытаюсь группировать по CategoryId и отображать свойство CategoryId + Name для группы, мне нужна помощь в модификации этого кода, чтобы можно было отобразить свойство Name, посмотреть вид ниже, увидеть, что я имею в виду.Linq grouping получает несколько свойств

Database

ItemCategory
INT ItemId
INT CategoryId

Категория
INT CategoryId
INT? ParentId
строки Имя

var itemcategories = db.Fetch<ItemCategory, Category>(@"SELECT * FROM ItemCategory LEFT JOIN Category on Category.CategoryId = ItemCategory.CategoryId WHERE ItemId = @0", item.ItemId); 


var grouped = from b in itemcategories 
       where b.Category.ParentId != null 
       group b by b.Category.ParentId ?? 0 into g 
       select new Group<int, ItemCategory> { Key = g.Key, Values = g }; 

public class Group<K,T> 
{ 
    public K Key; 
    public IEnumerable<T> Values; 
} 

Ввиду

@foreach (var group in @Model.ItemCategories) 
{ 
    @group.Key **Category.Name should be displayed here** 
} 
foreach (var value in group.Values) 
{ 
    @value.Category.Name 
} 
+0

Можете ли вы уточнить, в чем проблема? У вас уже есть '@ value.Category.Name'. Является ли проблема тем фактом, что вы ожидаете, что '@ group.Key' будет именем категории? –

+0

Да, я хочу, чтобы @ group.key называлась категорией. –

+0

, но это невозможно с тем, как вы создали свой класс Group, потому что тип 'Key' -' int', а тип 'Category.Name' -' string'. Итак, как мы это сделаем ? –

ответ

0

Я думаю, что вы ищете ответ представленный здесь: Group by in LINQ.
Однако вы также должны изменить свой запрос БД, чтобы он возвращал фактический результат соединения, а не только IEnumerable<ItemCategory>.
Group класс может выглядеть следующим образом:

public class Group<K,T> 
{ 
    public K Key; 
    public IEnumerable<T> Values; 
    public IEnumerable<string> CategoryNames; 
} 

Обратите внимание, что если вы хотите сгруппировать по ParentId, ваш ключ всегда будет ParentId, это идея функции GroupBy.
С учетом этого нового запроса Group и запроса БД вы должны использовать g.Name в качестве параметра для CategoryNames.

Смежные вопросы