在DynamicLinq查询中使用扩展方法

时间:2011-07-11 15:39:05

标签: c# asp.net linq telerik

我想扩展Telerik RadGrid的过滤行为。 例如,如果用户使用以下单词“michele”过滤网格,则还应返回包含“michèle”的行。 Telerik RadGrid中不支持开箱即用。 因此,我为String类型编写了一个扩展方法:public static bool IsSqlLikeMatch( this string input, string pattern ) { [...] }

作为第二步,我替换了RadGrid的FilterExpression,如下所示:

this.MasterTableView.FilterExpression.Replace( "Contains", "IsSqlLikeMatch" );

但遗憾的是我收到以下错误消息:

  

类型'String'

中不存在适用的方法'IsSqlLikeMatch'

Telerik RadGrid使用DynamicLinq。所以我的问题是:“我可以在DynamicLinq中使用扩展方法吗?”我该如何做到这一点?

编辑09/09/2011: 我已经联系了Telerik的支持,这是他们的回答:

  

遗憾的是,您无法扩展Telerik.Web.UI.dll中包含的动态linq函数。因此,对DynamicLinq类的更改不会影响RadControls内部使用的ExpressionParser。但是,您可以尝试更改Dynamic Linq库并通过从RadGrid解析获取过滤器表达式并将它们传递给更改的Dynamic Linq类的方法并将RadGrid绑定到返回的数据来执行自定义过滤。我附上了一个小样本,演示了如何使用RadGrid的过滤/排序表达式来过滤,排序和翻阅ObjectDataSource。

1 个答案:

答案 0 :(得分:0)

为了使用扩展方法,您必须为您定义扩展方法的类的命名空间指定using

因此,请尝试将您的类放在命名空间中,并为其添加using

另外,请确保将此类定义为public static。