2016-12-14 131 views
3

我試圖創建一個LINQ查詢where子句是根據用戶的選擇構造的可變where子句

if (!string.IsNullOrEmpty(txbbox.Text)) 
{ 

    query = "s.date== DateTime.Parse(txbbox.Text)"; 
} 

if (!string.IsNullOrEmpty(txbbox.Text)) 
{ 
    query = query + " & (s.type.Contains(txbbox.Text))"; 
} 

有一種方法通過內置在where子句中的變量在LINQ查詢C#的LINQ ?

Stemp = (from s in SList 
       where ***query*** 
       orderby s.DataScadenza 
       select s).ToList(); 
+1

@HimBromBeere有沒有必要在這裏使用字符串,所以我不認爲適用 –

+0

注意:您是從同一個文本框兩次讀取和應用完全不兼容的測試。 ..這幾乎肯定是一個錯誤 –

回答

6

是;在這種情況下很簡單,實際上是:

IEnumerable<Whatever> query = SList; // avoid var here, as will impact later assignment 
    if (!string.IsNullOrEmpty(txbbox.Text)) 
    { 
     var when = DateTime.Parse(txbbox.Text); // to avoid parsing per item 
     query = query.Where(s => s.date == when); 
    } 
    if (!string.IsNullOrEmpty(txbbox.Text)) 
    { 
     query = query.Where(s => s.type.Contains(txbbox.Text)); 
    } 
    Stemp = query.OrderBy(s => s.DateScadenze).ToList();