2010-11-04 50 views
2

您好我有這樣的LINQ查詢:動態凡在LINQ

var q = 
    (from vr in Util.db.ValuationsRequests 
    where vr.dtSubmitted != null 
    select vr 
    ).AsEnumerable<ValuationsRequest>(); 

但我想做一個搜索,使用3個參數:paramValuationId(INT),paramValue(布爾),paramTitle(串)。

喜歡的東西:

if (paramTitle != string.empty) 
//add this field to the where 

但如果paramTitle是空的,我不想尋找它。

這樣做的正確方法是什麼?

+0

哪些相應的字段到你的可選參數比較? – dotariel 2010-11-04 16:06:51

回答

5
string paramTitle = "hello"; 
var q = 
    (from vr in Util.db.ValuationsRequests 
    where vr.dtSubmitted != null 
     && (paramTitle == "" || vr.paramTitle == paramTitle) 
    select vr 
    ).AsEnumerable<ValuationsRequest>(); 
+1

你的AND子句讓我的眼睛受傷。 '&&(paramTitle ==「」|| vt.paramTitle == paramTitle)'請! – fearofawhackplanet 2010-11-04 16:16:12

+0

@fearofawhackplanet ....大聲笑,對不起... ...你的權利,應該有簡化 – 2010-11-04 16:18:15

+0

不會paramTitle ==「」可能會導致該領域的任何索引不被使用?如果在代碼中動態構建動態地址,那麼只執行適用的SQL會不會更好? – 2010-11-04 16:18:33

2
var q = 
(from vr in Util.db.ValuationsRequests 
where vr.dtSubmitted != null 
select vr 
).AsEnumerable<ValuationsRequest>(); 

if(!string.IsNullOrEmpty(paramTitle)) 
    q = q.Where(p => p.ParamTitle == paramTitle);