我正在使用Entity Framework来连接MySQL。
我有一个实现颠覆技术的增量数据。每组subversion记录具有相同的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
,但无论如何都找不到它。
请帮我找另一种方法。
答案 0 :(得分:1)
您如何使用内部查询?
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();
答案 1 :(得分:0)
在引用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();
}
现在工作正常。