在LINQ中从关联表中获取一个表和最新1行的行

时间:2010-08-17 12:54:34

标签: linq select group-by

这个问题类似于这个问题:

LINQ to SQL: GroupBy() and Max() to get the object with latest date

但我有一张表,我想从中返回很多行。它的主键用作第二个表中的外键。对于从第一行返回的每一行,我还想返回(在同一结果集中)最新的(在这种情况下,按日期时间字段排序)1行。

如何使用C#在LINQ中构建它?

我最好的是:

    var instances = from i in ContextDB.Instances
                    join p in ContextDB.Points on i.InstanceID equals p.InstanceID
                    where categoryIDs.Contains(j.CategoryID)
                    group p by p.InstanceID into latestPoint
                    select new latestPoint.OrderBy(i => i.Instance.Title).FirstOrDefault();

但这显然是错误的。虽然我认为我正确理解group但我认为我并没有正确理解into

[编辑]为了避免混淆,我认为这个问题可以概括为“如何从一个表中执行行以及从另一个表中每个行的最新1行?”

1 个答案:

答案 0 :(得分:1)

怎么样:

var instances = from i in ContextDB.Instances
                where i.CategoryInstances.Any(categoryIDs.Contains(ci => ci.CategoryID))
                select new
                {
                    Instance = i,
                    LatestPoint = i.Points.OrderBy(i => i.Instance.Title).FirstOrDefault()
                };

请注意,我可以通过using associations instead of join删除大量冗余。