1

我正在使用实体框架来连接到 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,但无论如何都找不到修复它。

请帮我找出另一种方法。

4

2 回答 2

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();
于 2013-04-10T11:28:06.887 回答
0

参考这篇文章后我找到了更好的解决方案

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();
}

现在它工作正常。

于 2013-06-12T04:20:28.103 回答