2011-10-06 64 views
1

我有一個linq語句,它返回基於where子句的記錄列表
此where子句檢查兩個參數值。
其中一個參數是可選的。
所以我需要一個建議,如果我可以根據可選參數
像這樣Linq Where子句根據參數更改

if(locid==0) 
    { 
    where (p.CustomerID == custid) 
    } 
else{ 
    where (p.CustomerID == custid) & (p.LocationID == locid) 
    } 

任何一個可以幫助我,我怎麼能得到這個工作,我的切換where子句。

感謝

回答

2

你可以嘗試這樣寫的:

where (p.CustomerID == custid) && (locid == 0 || p.LocationID == locid) 
3

是 - 查詢可以組成(儘管你不需要這些對於這種特殊情況下不作爲@rsbarro指出):

var query = p; 

if(locid==0) 
    query = query.Where(p =>p.CustomerID == custid); 
else 
    query = query.Where(p =>p.CustomerID == custid & p.LocationID == locid); 

//any other conditions 
1

正如BrokenGlass提到的,你應該使用成分:

IQueryable<Foo> query = unfiltered.Where(p => p.CustomerID == custId); 
if (locid != 0) 
{ 
    query = query.Where(p => p.LocationID == locid); 
} 

請注意,查詢是而不是直到您開始從它讀取數據,因此您不必擔心這會產生多個請求。

它看起來像你原來的文章中,你試圖使用零碎的查詢語法 - 這將無法正常工作,但「點符號」在這裏很簡單。如果你願意的話,你總是可以使用查詢表達式來創建你的初始查詢 - 同樣,這個查詢不會立即執行。