C# linq max在a内;其中;带“的条款;及;lambda的情况也一样
我需要得到一个包含这些条件的字段,我在SQL中的实际代码如下:C# linq max在a内;其中;带“的条款;及;lambda的情况也一样,c#,linq,lambda,C#,Linq,Lambda,我需要得到一个包含这些条件的字段,我在SQL中的实际代码如下: SELECT archivo, fechadiario FROM ri_diariodefotos WHERE idproyecto=@projectId AND fechadiario = (SELECT MAX(fechadiario) FROM ri_diariodefotos WHERE idproyecto=@projectId) 实际上
SELECT archivo, fechadiario
FROM ri_diariodefotos
WHERE idproyecto=@projectId
AND fechadiario = (SELECT MAX(fechadiario)
FROM ri_diariodefotos
WHERE idproyecto=@projectId)
实际上我有:
RI_DiariodeFotos.Where(a=> a.Idproyecto == PROJECTID && a.Fechadiario ==
RI_DiariodeFotos
.Where(x=> x.Idproyecto == PROJECTID)
.OrderByDescending(x=> x.Fechadiario)
.Select(x=> x.Fechadiario)
.FirstOrDefault())
.Select(w=> w.Archivo).ToList().First()
它实际上是有效的,但当我尝试时,我得到了这个错误
LINQ to实体无法识别该方法
'System.Collections.Generic.List'1[System.String]
ToListString'
方法,而此方法无法转换为存储表达式
如果我很了解你,你想为每个项目获得
Max(Fechadiario)
。因此,您需要按projectid
对数据进行分组:
var result = RI_DiariodeFotos
.Where(x=> x.Idproyecto==PROJECTID)
.GroupBy(x=> x.Idproyecto)
.Select(g=>new
{
ProjectId = g.Key,
Fechadiario = g.Max(f=>f.Fechadiario)
});
注意:
要将其与EF一起使用,必须按如下方式声明类:
public class ProjectStatistic
{
public int ProjectId {get;set;}
public int Fechadiario {get;set;}
}
然后,您必须通过在
Select
语句中的new
关键字之后添加ProjectStatistic
将查询结果“抓取”到Enumerable
。您是否尝试过将.ToList()
全部删除?是的,你确实理解得很好,但是我需要一个条款“Where”来过滤请求的项目。非常感谢。事实上,我有一个部分答案,但你的解决方案更好。。。