我需要获取一个具有这些条件的字段,我在SQL中的实际代码是这样的:
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(of 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;}
}
然后,您必须通过在语句中的关键字后面添加ProjectStatistic
new
将查询结果"抓取"到Enumerable<ProjectStatistic>
Select
。