一对多加入 - 在很多方面只采用最后一个

时间:2010-10-03 22:45:10

标签: entity-framework join max

我是EF的新手,所以如果我之前的问题得到解答,我很抱歉..我只是想不出语法......

我有两个实体Category& Product,其中一个类别包含许多产品。

我想获得所有类别,只有他们的最新产品(它有一个名为timestamp的日期属性)

我不知道该怎么做。 : - /

如果可能,我想知道编写它的两种方法的语法,包括 sql-like 语法和 C#like 语法,例如

ctx.Categories.Include("Products").ToList() 

from c in ctx.Categories.Include("Products")

谢谢!

1 个答案:

答案 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查询中返回,因此不需要包含。