2015-10-08 256 views
4

考慮這個功能:LINQ中的所有三元運算符?

public List<Employees> getEmployees(....... , int? takeMax = null) 
{ 
    // some code 
    ... 

    var items = DB_Context.Employees.Where(%%%%% WHATEVER %%%%).Take(takeMax.HasValue && takeMax.Value > 0 ? takeMax.Value : ??????).ToList(); 
} 

我怎麼能採取一切的情況下,takeMax爲NULL的項目?

Take()需要int,我不想寫類似

int total = DB_Context.Employees.Count(); 
var items = DB_Context.Employees.Where(%%%%% WHATEVER %%%%).Take(takeMax.HasValue && takeMax.Value > 0 ? takeMax.Value : total).ToList(); 

任何替代方案?

+0

您可能想添加大括號到您的條件和檢查。它適用於我沒有任何錯誤 –

回答

3

這是一種方法,你還是得寫兩行(如您的例子採取計數),但你不必計算Count

var query = DB_Context.Employees.Where(%%%%% WHATEVER %%%%); 
var items = takeMax.HasValue && takeMax.Value > 0 ? 
       query.Take(takeMax.Value).ToList() : query.ToList(); 
+0

你的意思是說,查詢的評估將在第二行完成,對吧?好一個 。 – ron

+0

@ron是的,直到你做了一個'ToList()'或'foreach',這個查詢纔會被評估。 –

4

你只能申請取在這種情況下:

var itemsQuery = DB_Context.Employees.Where(%%%%% WHATEVER %%%%); 
if (takeMax > 0) 
{ 
    itemsQuery = itemsQuery.Take(takeMax); 
} 

var items = itemsQuery.ToList(); 
+0

甚至比我的(現在刪除)'if ... else'方法更好。兩者都使用相同的「Where」。 –

+0

我可能不會建議這樣做,因爲我可能只需要db中的數千行中有10行。我不應該把他們都搶走。 –

+0

@TimSchmelter Take()用於不想檢索所有內容(SELECT TOP n)的情況,所以我寧願在提取時(而不是提取所有記錄然後Take())過濾記錄 –

0

也許是這樣的:

public List<Employees> getEmployees(....... , int? takeMax = null) 
{ 
// some code 


... 

if(takeMax != null) 
{ 
    return DB_Context.Employees.Where(%%%%% WHATEVER %%%%).Take(takeMax).ToList(); 
} 
else 
{ 
    return return DB_Context.Employees.Where(%%%%% WHATEVER %%%%).ToList(); 
}