这个问题类似于这个问题:
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行?”
答案 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删除大量冗余。