2011-01-31 55 views
0

我有一個radgrid控件,當我篩選,我得到的是這樣的:如何使用radgrid控件的FilterExpression使用LINQ

"(iif(Name== null, \"\", Name).ToString().ToUpper().Contains(\"ap\".ToUpper()))" 

在我的LINQ數據源選擇的事件,我想通過使用此過濾器在我的結果做結果= results.Where(FilterExpression),但這不起作用。

回答

0

我想你想要像 results.Where(I =>(i.Name + 「」)。toString()方法。ToUpper的()。包含( 「AP」 .ToUpper())))

2

這裏是我用過的:

var filterExpression = gridOrderLineItems.MasterTableView.FilterExpression; 
if (!string.IsNullOrEmpty(filterExpression)) 
    allItems = allItems.AsQueryable() 
       .Where(filterExpression) 
       .ToList(); 

正如你從Telerik文檔中看到的那樣,RadGrid中有兩種過濾模式。一個是Lynq Dynamic,另一個是類似SQL的。我認爲默認是動態的,只要你的數據源支持它。我有一種情況,網格使用SQL語法,因爲數據源是IEnumerable,爲了啓用動態表達式,我不得不將其更改爲List。你可以通過簡單地檢查FilterExpression屬性來查看網格的模式。您還可以使用EnableLinqExpressions屬性。

+0

什麼是痛苦。只是偶然發現了這一點。將`.ToList()`添加到我的`IQueryable`集合中,將filterexpression從類似SQL的狀態改爲LINQ-like。你先生,可能會得到讚揚。 – 2012-11-13 16:44:44

0

我的解決方案

var z = RadGrid2.MasterTableView.FilterExpression; 
      string filter = ""; 
      if (z.Split('\"').Length > 3) 
      { 
       string v = "'" + z.Split('\"')[3] + "'"; 
       string c = z.Split('\"')[0]; 
       string opr = " like "; 
       c = c.Replace("(iif(", "").Replace(" ", "").Replace("==", "").Replace("null", "").Replace(",", ""); 

       filter = c + opr + v ; 
      } 
      else 
       filter = z; 


      e.InputParameters["filterExpression"] = filter;