Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于max的实体框架查询_C#_Linq_Entity Framework - Fatal编程技术网

C# 基于max的实体框架查询

C# 基于max的实体框架查询,c#,linq,entity-framework,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 {

有人让我将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”只能用作最终查询操作。 考虑在这个实例中使用方法“FrestRealDebug”代替

能否将上述T-SQL语句转换为一个LINQ查询语句?

给您:

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

这里的重要部分是.Select(x=>x.ToList())。ToList返回一个iGroup的值,每个值都是您最终想要排序和选择的最大值。

My linq语句显然可以返回一些项。如果两个查询都可以运行,它们都返回一个值。@hvd它们运行并返回相同的结果。如果为True,则返回一个值,但该值是一个“分组”,可以在上下枚举。分组中的所有“铜币”都具有最大ID。@hvd你说得对。我把自己弄糊涂了……但我相信我现在找到了正确的解决办法!:)我更新了答案。老实说,所有的编辑看起来更像是一个猜谜游戏,而不是答案。我怀疑linqto实体是否会接受投影内部的
ToList()
。你测试过吗?当你按照错误信息的提示去做时会发生什么<如果你知道你有一个非空集合,那么code>FirstOrDefault应该给出与
First
相同的结果,因此如果EF接受
FirstOrDefault
,而
First
不接受,那么使用
FirstOrDefault