选择第一个记录每个组
问题描述:
我正在使用Entity Framework来连接到MySQL。选择第一个记录每个组
我有一个实现颠覆技术的增量数据。每组颠覆记录具有相同的LinkedId
并且由UpdatedTime
分开。
我的期望是从数据库中获取每条记录的最新版本。因此,我写了LINQ声明象下面这样:
public List<Entry> LoadFinalEntries(int rptId) {
return (from ent in ctx.Entries
where ent.ReportId == rptId
orderby ent.LinkedId, ent.UpdatedTime descending
group ent by ent.LinkedId into svnEnt
select svnEnt.FirstOrDefault()).ToList();
}
但在运行时,它抛出一个EntityCommandCompilationException
告知“指定的方法不支持。”我知道该方法是FirstOrDefault
,但无法找到修复它。
请帮我找出另一种方法。
答
我已经找到了更好的解决方案指this article
public List<Entry> GetFinalEntries(int rptId) {
// Get the latest updated time for each linked id
var latestUpdatedTimes = from ent in ctx.Entries
where ent.ReportId == rptId
group ent by ent.LinkedId into svnEnt
select new { LinkedId = svnEnt.Key, UpdatedTime = svnEnt.Max(ent => ent.UpdatedTime) };
// Compare (by joining) to get full entries
var latestEntries = from ent in ctx.Entries
where ent.ReportId == rptId
join time in latestUpdatedTimes
on new { ent.LinkedId, ent.UpdatedTime } equals time
select ent;
return latestEntries.ToList();
}
后现在它工作正常。
答
您认为如何使用内部查询?
return (from ent in ctx.Entries
where ent.ReportId == rptId &&
ent.UpdatedTime ==
(from inner in ctx.Entries
where inner.LinkedId == ent.LinkedId &&
inner.ReportId == rptId
select inner.UpdatedTime).Max()
select ent).ToList();
+0
谢谢!有用。然而,我想使用LINQ的优势,您的查询是我通过直接查询到数据库。 – 2013-04-11 03:07:53
你使用MSSQL吗?我无法重现这个问题... – 2013-04-10 10:04:54
哦,对不起!我正在使用MySQL – 2013-04-10 10:07:06