linq max在一个“where”子句中,在lambda中也带有“和”条件

时间:2015-06-18 19:56:39

标签: c# linq lambda

我需要获得具有这些条件的字段,我在SQL中的实际代码是:

function fetchTransMain($trans, $itemID){
    foreach($trans as $key => $val){
        if($val["ID"] == $itemID){
            echo $val["trans"];
        }
    }
}

我实际上有这个:

SELECT archivo, fechadiario 
FROM ri_diariodefotos 
WHERE idproyecto=@projectId
AND fechadiario = (SELECT MAX(fechadiario) 
                   FROM ri_diariodefotos 
                   WHERE idproyecto=@projectId)

它实际上有效,但当我试图得到这个错误时

  

LINQ to Entities无法识别该方法   “System.Collections.Generic.List`1 [System.String]   ToListString”   方法,并且此方法无法转换为商店表达式。

1 个答案:

答案 0 :(得分:0)

如果我理解你,你想为每个项目获得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;}
}

然后,您必须在Enumerable<ProjectStatistic>语句中的ProjectStatistic关键字之后添加new,将查询结果“抓取”到Select