【问题标题】:Telerik MVC Grid : Create custom FilterDescriptor based on lambda expressionTelerik MVC Grid:基于 lambda 表达式创建自定义 FilterDescriptor
【发布时间】:2011-10-10 22:03:17
【问题描述】:

目前我正在使用此代码创建自定义过滤器:

var fName = new FilterDescriptor
{
    Member = "Name",
    MemberType = typeof(string),
    Operator = FilterOperator.Contains,
    Value = name
};

将像这样添加到 GridCommand 中:

gridCommand.FilterDescriptors.Add(fName);


但是,想创建基于 Linq lambda 表达式的过滤器,例如:

IQueryable<CD> query = ...
if (!string.IsNullOrWhiteSpace(Artist))
{
    query = query.Where(cd => cd.Artist.Contains(Artist));
}

if (!string.IsNullOrWhiteSpace(Name))
{
    query = query.Where(cd => cd.Name.Contains(Name));
}

如何做到这一点?

【问题讨论】:

    标签: model-view-controller filter grid telerik expression


    【解决方案1】:

    好的,所以您目前的做法并没有太大问题。除非您确定要添加为 linq 表达式,否则请使用以下示例。

    var query = from t in query where t.Artist.Contains(Artist) && t.Name.Contains(Name) select t;
    

    如果 Artist 和 Name 都为空或 null 则无论如何它都会返回。

    【讨论】:

    • 我真正想根据 Telerik 过滤器自动创建 linq 表达式。
    【解决方案2】:

    在 Telerik 的 QueryableExtensions.cs 文件中,此扩展方法将完成这项工作:

    /// <summary>
    /// Filters a sequence of values based on a collection of <see cref="IFilterDescriptor"/>.
    /// </summary>
    /// <param name="source">The source.</param>
    /// <param name="filterDescriptors">The filter descriptors.</param>
    /// <returns>
    /// An <see cref="IQueryable" /> that contains elements from the input sequence
    /// that satisfy the conditions specified by each filter descriptor in <paramref name="filterDescriptors" />.
    /// </returns>
    public static IQueryable Where(this IQueryable source, IEnumerable<IFilterDescriptor> filterDescriptors) { }
    

    【讨论】:

    • 你有这方面的工作例子吗?基于 Telerik 过滤器自动创建 LINQ 表达式。我正在尝试做同样的事情。
    • 现在我正在使用github.com/StefH/KendoGridBinderEx 将 Telerik 过滤器转换为动态 LINQ 查询
    • 8 年后,它仍然存在,有时仍然需要。我在 .NET Core 3.1 中,几乎认为它已经消失了。没有意识到我需要在我的名单上做.AsQueryable()
    猜你喜欢
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多