在DynamicLinq-query中使用扩展方法

本文关键字:扩展 方法 DynamicLinq-query | 更新日期: 2023-09-27 18:01:41

我想扩展Telerik RadGrid的过滤行为。例如,如果用户使用下面的单词"michele"过滤网格,它也应该返回包含"mich"的行。这在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中包含的动态链接函数。所以你对DynamicLinq类的改变不会影响到RadControls内部使用的ExpressionParser。但是,您可以尝试更改Dynamic Linq库,并通过从RadGrid解析中获取过滤器表达式来执行自定义过滤,并将它们传递给更改后的Dynamic Linq类方法,并将RadGrid绑定到返回的数据。我附上了一个小示例,演示了如何使用RadGrid的过滤器/排序表达式来过滤,排序和通过ObjectDataSource页面。

在DynamicLinq-query中使用扩展方法

为了使用扩展方法,您必须为在其中定义扩展方法的类的名称空间拥有一个using指令。

所以试着把你的类放在一个命名空间中,并为它添加using