2016-12-14 137 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();