Linq分组获得多个属性

时间:2014-11-02 15:45:16

标签: c# linq

我尝试按CategoryId进行分组并显示该组的CategoryId + Name属性,我需要帮助修改此代码,以便显示Name属性,查看下面的视图,看看我的意思。

数据库

ItemCategory
int ItemId
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
}

1 个答案:

答案 0 :(得分: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的参数。