LINQ - 有没有办法在没有ForEach的分组后获取元素值?

时间:2011-10-07 20:05:19

标签: linq-to-sql foreach grouping

我有一个包含CategoryId字段的Items表。这是一个FK进入Categories表。我想按CategoryId对我的项目进行分组,并返回Items和Categories.Name。

我知道我可以在C#中执行此操作:

var ItemsByCat = 
    from i in Items
    group i by i.CategoryId into g
    select g

foreach(var n in ItemsByCat)
{
    blah, blah
}

我的问题是 - 有没有办法获得分组的元素值部分而不必迭代循环?类似的东西:

from i in Items
group i by i.CategoryId into g
select new {
    CategoryID = g.Key,
    CategoryName = ???,
    Items = ???
}

非常感谢,

BK

4 个答案:

答案 0 :(得分:1)

我认为这就是你要找的东西:

from i in Items
group i by i.CategoryId into g
select new 
{
    CategoryID = g.Key,
    CategoryName = g.First().Category.Name,
    Items = g
}
编辑:我希望这可以从评论中回答你的问题。

g是按CategoryId分组的项目集合。 Items中的select可以是一个投影,包括您需要的Item属性的任何子集。例如:

from i in Items
group i by i.CategoryId into g
select new 
{
    CategoryID = g.Key,
    CategoryName = g.First().Category.Name,
    Items = g.Select(a => new{a.ItemID, a.ItemName})
}

答案 1 :(得分:0)

加入Categories表怎么样?

from i in Items
join c in Categories on i.CategoryId equals c.Id
group i by i.CategoryId into g
select new {
    CategoryID = g.Key,
    CategoryName = c.Name,
    Items = i
}

答案 2 :(得分:0)

CategoryName应为i.Category.CategoryName //the name property

鉴于您已正确设置关系。

项目应该是group by的值,不确定为什么你需要再次这样做。

答案 3 :(得分:0)

假设您在变量类别中有一个类别集合,它将如下所示:

var ItemsByCategory = 
  from i in items
  join c in categories on i.CategoryId equals c.Id
  group i by i.CategoryId into g
  select new {
    CategoryId=g.Key,
    CategoryName=c.Name,
    Items=g.Items
}