我是EF的新手,所以如果我之前的问题得到解答,我很抱歉..我只是想不出语法......
我有两个实体Category
& Product
,其中一个类别包含许多产品。
我想获得所有类别,只有他们的最新产品(它有一个名为timestamp的日期属性)
我不知道该怎么做。 : - /
如果可能,我想知道编写它的两种方法的语法,包括 sql-like 语法和 C#like 语法,例如:
ctx.Categories.Include("Products").ToList()
from c in ctx.Categories.Include("Products")
谢谢!
答案 0 :(得分:1)
这是类似SQL的方式:
var categories =
from p in products
group p by p.Category into g
select new { Category = g.TheKey, LatestProduct = g.Max(p => p.TimeStamp) };
这是Lambda方式(警告,未经测试):
var categories = products.GroupBy(p => p.Category)
.Select(g => new { Category = g.TheKey,
LatestProduct = g.Max(p => p.TimeStamp)});
关于Categories.Include("Products")
的说明,您的示例中不需要此内容。您可以使用“Include”进行预先加载,例如,如果您有从EF返回的类别列表,那么当您执行Categories.Product时,您将获得相关产品。
但您需要的只是一个类别列表,每个类别都有一个产品 - 已在上面的LINQ查询中返回,因此不需要包含。