gpt4 book ai didi

asp.net-mvc - 过滤 Kendo UI MVC 网格时构建自定义谓词

转载 作者:行者123 更新时间:2023-12-01 17:54:58 25 4
gpt4 key购买 nike

我正在使用 Kendo UI for ASP.NET MVC 和服务器包装器。

IQueryable 扩展方法 ToDataSourceResult 当前创建类似于

的查询
 myQuery.Where(x=>x.SearchField.Contains(searchString))

使用 Contains 运算符进行过滤时。

不幸的是,我使用的是 no-sql 数据库 RavenDb 并且它的 linq 提供程序不支持 contains 方法。相反,它为 IQueryable 提供了名为“搜索”的扩展。所以在进行全文搜索时我应该写

 myQuery.Search(x=>x.SearchField, searchString)

代替Where子句。这就是为什么我很好奇是否有机会覆盖默认谓词构建器?现在我正在这样做(这是非常基本的实现):

   public static IQueryable<TEntity> ApplyFiltering<TEntity>(this IQueryable<TEntity> queryable, IList<IFilterDescriptor> filters) where TEntity:class
{
foreach (var filter in filters.Cast<FilterDescriptor>()){

var pe = Expression.Parameter(typeof(TEntity), "x");
var left = Expression.Property(pe, typeof(TEntity).GetProperty(filter.Member));
queryable = queryable.Search(Expression.Lambda<Func<TEntity, object>>(left, new ParameterExpression[] { pe }), filter.Value.ToString());
}
filters.Clear();

return queryable;
}

//And controller code:

public ActionResult Data_Read([DataSourceRequest] DataSourceRequest request)
{
var query = repository.GetQueryable();
query = query.ApplyFilters(request.Filters);
return Json(query.ToDataSourceResult(request));
}

这是正确的解决方法吗?或者有我在文档中找不到的更明显的解决方案?

最佳答案

有趣的问题。

我认为 Kendo MVC Wrappers 中没有任何可插入的功能来改变这一点。您可以查看源代码:Kendo.Mvc.Extensions.FilterTokenExtensions,也许可以更改它。

但是您也可以在 github 上修改我的项目:KendoGridBinderEx ,看一下文件 FilterObject.cs

更改代码:

switch (op)
{
...

case "contains":
exStr = string.Format("{0}{2}.Contains({1})", field, param, caseMod);
break;

...

switch (op)
{
...

case "contains":
exStr = string.Format("{0}{2}.Search({1})", field, param, caseMod);
break;

...

请告诉我这是否有效。

关于asp.net-mvc - 过滤 Kendo UI MVC 网格时构建自定义谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20788936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com