2

有人要求我将 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 查询语句吗?

4

1 回答 1

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 的值,每个值都是您最终想要排序并选择最大值的值。

于 2012-07-18T04:09:18.053 回答