簡體   English   中英

linq max在lambda中也帶有“ and”條件的“ where”子句中

[英]linq max inside a “where” clause with an “and” condition too in lambda

我需要獲取具有這些條件的字段,我在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 Entities無法識別方法'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;}
}

那么您必須通過在Select語句中的new關鍵字之后添加ProjectStatistic ,將查詢結果“捕獲”到Enumerable<ProjectStatistic>中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM