我有一個radgrid控件,當我篩選,我得到的是這樣的:如何使用radgrid控件的FilterExpression使用LINQ
"(iif(Name== null, \"\", Name).ToString().ToUpper().Contains(\"ap\".ToUpper()))"
在我的LINQ數據源選擇的事件,我想通過使用此過濾器在我的結果做結果= results.Where(FilterExpression),但這不起作用。
我有一個radgrid控件,當我篩選,我得到的是這樣的:如何使用radgrid控件的FilterExpression使用LINQ
"(iif(Name== null, \"\", Name).ToString().ToUpper().Contains(\"ap\".ToUpper()))"
在我的LINQ數據源選擇的事件,我想通過使用此過濾器在我的結果做結果= results.Where(FilterExpression),但這不起作用。
我想你想要像 results.Where(I =>(i.Name + 「」)。toString()方法。ToUpper的()。包含( 「AP」 .ToUpper())))
這裏是我用過的:
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屬性。
我的解決方案
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;
什麼是痛苦。只是偶然發現了這一點。將`.ToList()`添加到我的`IQueryable`集合中,將filterexpression從類似SQL的狀態改爲LINQ-like。你先生,可能會得到讚揚。 – 2012-11-13 16:44:44