C# linq max在a内;其中;带“的条款;及;lambda的情况也一样

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) 实际上

我需要得到一个包含这些条件的字段,我在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(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”来过滤请求的项目。非常感谢。事实上,我有一个部分答案,但你的解决方案更好。。。