2015-06-18 41 views
0

我需要得到一個字段與條件,在SQL我實際的代碼是這樣的:LINQ最大一個「where」子句中有一個「和」條件太拉姆達

SELECT archivo, fechadiario 
FROM ri_diariodefotos 
WHERE [email protected] 
AND fechadiario = (SELECT MAX(fechadiario) 
        FROM ri_diariodefotos 
        WHERE [email protected]) 

其實我有這樣的:

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到實體無法識別方法 'System.Collections.Generic.List`1 [System.String] ToListString' 方法,並且此方法無法轉換爲存儲表達式。

+4

你有沒有嘗試完全刪除'.ToList()?這似乎沒有必要。 –

回答

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;} 
} 

,那麼你必須通過在Select聲明中的new關鍵字後面加上ProjectStatistic,將「抓取」查詢結果轉換爲Enumerable<ProjectStatistic>

+0

是的,你確實瞭解,但我需要一個條款「Where」來過濾只請求的項目 – theoneomega

+0

查看更新的答案;) –

+0

非常感謝你。我其實有一個部分的答案,但你的解決方案更好... – theoneomega