2013-07-23 124 views
2

我有這句話在SQL Server:是空的實體框架5

SELECT * FROM Documentos WHERE (@param IS NULL OR strNOMPRO = @param) 

,我做到這一點與實體

DocumentsList = db.DOCUMENTOS 
       .Where(d => d.strNOMPRO == nombre && d.strNOMPRO == null) 
       .OrderByDescending(d => d.datFECCER).ToList(); 

如果param爲null,這個回報率都在SQL,但在LINQ寄存器返回0個寄存器

我怎麼能做到這一點呢?

+2

看起來你不小心用'&&'而不是'.Where()'中的'||'。 –

回答

5

這是SQL的等效WHERE語句:

DocumentsList = db.DOCUMENTOS 
       .Where(d => nomber == null || d.strNOMPRO == nombre) 
       .OrderByDescending(d => d.datFECCER) 
       .ToList(); 

它檢查參數null OR(|| Operator)它會檢查strNOMPRO財產應該等於參數。

BTW這樣你的參數不能在查詢過程中更改,這是更有效的動態添加過濾條件:

var query = db.DOCUMENTOS; 

if (!String.IsNullOrEmpty(nombre)) 
    query = query.Where(d => d.strNOMPRO == nombre); 

DocumentsList = query.OrderByDescending(d => d.datFECCER).ToList(); 

進一步閱讀:&& Operator|| Operator

+1

非常感謝! – user2564914