如何在Linq中使用radgrid的FilterExpression

时间:2011-01-31 16:17:59

标签: c# linq radgrid

我有一个radgrid,当我过滤时,我会得到类似的东西:

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

在我的Linq数据源选择事件中,我想在结果中使用此过滤器,例如results = results.Where(FilterExression),但这不起作用。

3 个答案:

答案 0 :(得分: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属性。

答案 1 :(得分:0)

我想你想要的东西         results.Where(I =>(i.Name + “”。)的ToString()ToUpper的()包含( “AP” .ToUpper())))

答案 2 :(得分: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;