有人要我将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查询语句吗?
答案 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的值,每个值都是您最终要订购的值并选择最大值。