LINQ - 有没有办法在没有ForEach的情况下获得元素值?
我有一个包含CategoryId字段的项目表。这是一个分类表中的FK。我想通过CategoryId对我的Items进行分组并返回Items和Categories.Name。LINQ - 有没有办法在没有ForEach的情况下获得元素值?
我知道我可以在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
我认为这是你在找什么:
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})
}
怎么样加入分类表?
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
}
CategoryName
应该i.Category.CategoryName //the name property
给你有关系的正确安装。
的项目应该是组的值通过,不知道为什么你需要再做一次。
分组后,我不再在范围内。我所有的工作都是g。 – BKahuna
是的,这就是我的意思,g中每个项目的值是按项目分组的。每个分组的条目都有一个键和项目(这是你的项目,哈哈) –
假设你有分类的变量类别的集合,将是这样的:
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
}
这假设你没有使用实体框架。在EF中,您只需走动导航属性即可,无需连接。 –
我认为一旦我进行分组,就会超出范围。如果我将连接移动到分组下面并加入到c.CategoryId = g.Key上的类别,它似乎可以工作。这是一个好方法吗? – BKahuna
这很好......我觉得很奇怪,这是行不通的其他方式,虽然,但它也许是它得到解析的方式。 –
这是Linq to Entities吗? –