2014-11-02 41 views
0

我想按CategoryId分組,並顯示組的CategoryId + Name屬性,我需要幫助修改此代碼,以便Name屬性可以顯示,查看下面的視圖看看我是什麼意思。Linq分組獲得多個屬性

數據庫

ItemCategory
INT項目Id
INT的CategoryId

類別
INT的CategoryId
詮釋?的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'成爲類別的名稱嗎? – 2014-11-02 17:37:24

+0

是的,我想@ group.key是類別的名稱。 – 2014-11-02 17:58:48

+0

但是你設計Group類的方式是不可能的,因爲'Key'的類型是'int','Category.Name'的類型是'string'。那麼我們如何做到這一點? – 2014-11-02 18:12:31

回答

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類和DB查詢,您應該能夠使用g.Name作爲CategoryNames的參數。