我有一个包含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
答案 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
}