Telerik MVC Grid: создание пользовательского FilterDescriptor на основе лямбда-выражения - PullRequest
3 голосов
/ 22 июля 2011

В настоящее время я использую этот код для создания пользовательского фильтра:

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

Что будет добавлено в GridCommand следующим образом:

gridCommand.FilterDescriptors.Add(fName);


Однако, хотелось бы создать фильтры на основе лямбда-выражения Linq, например:

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));
}

Как это сделать?

Ответы [ 2 ]

2 голосов
/ 19 февраля 2012

В файле QueryableExtensions.cs от Telerik этот метод расширения сделает работу:

/// <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) { }
0 голосов
/ 19 февраля 2012

Хорошо, так что нет ничего плохого в том, как вы делаете это в настоящее время. За исключением случаев, когда вы решили добавить в качестве выражения linq, используйте следующий пример.

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

Если как Artist, так и Name пустые или равны NULL, все равно все вернется.

...