2013-04-10 198 views
1

我正在使用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,但无法找到修复它。

请帮我找出另一种方法。

+0

你使用MSSQL吗?我无法重现这个问题... – 2013-04-10 10:04:54

+0

哦,对不起!我正在使用MySQL – 2013-04-10 10:07:06

回答

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

后现在它工作正常。

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(); 
+0

谢谢!有用。然而,我想使用LINQ的优势,您的查询是我通过直接查询到数据库。 – 2013-04-11 03:07:53

相关问题