实体框架查询最大值

时间:2012-07-18 03:11:42

标签: c# linq entity-framework

有人要我将T-SQL语句转换为LINQ to EF查询:

SELECT * FROM  CopperPrices  
where ID in 
  (select max(ID) as ID from copperprices group by market, pname)

我使用常见的LINQ-TO-OBJECT想法并给出以下答案:

class CopperPrice
{
    public int ID { get; set; }
    public string Market { get; set; }
    public string PName { get; set; }
}

var result = from p in copperPrices
      group p by new { Market = p.Market, PName = p.PName } into g
      select g.OrderByDescending(p => p.ID).First();

但由于以下例外情况,它无法在EF中使用:

  

方法'First'只能用作最终查询操作。   考虑在此实例中使用方法'FirstOrDefault'而不是

上面的T-SQL语句可以转换为一个LINQ查询语句吗?

1 个答案:

答案 0 :(得分:1)

你走了:

var result1 = copperPrices.GroupBy(g => new { g.Market, g.PName }).Select
     (
         x => x.ToList().OrderByDescending(z => z.ID).FirstOrDefault()
     );

这里重要的部分是.Select(x => x.ToList())。 ToList返回IGrouping的值,每个值都是您最终要订购的值并选择最大值。