[英]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.