3 Stimmen

Telerik MVC Grid : Erstellen von benutzerdefinierten FilterDescriptor basierend auf Lambda-Ausdruck

Derzeit verwende ich diesen Code, um einen benutzerdefinierten Filter zu erstellen:

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

Die dem GridCommand wie folgt hinzugefügt wird:

gridCommand.FilterDescriptors.Add(fName);

Möchte jedoch Filter auf der Grundlage von Linq-Lambda-Ausdruck wie erstellen:

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

Wie kann man das tun?

3voto

Stef Heyenrath Punkte 8510

In der Datei QueryableExtensions.cs von Telerik übernimmt diese Erweiterungsmethode diese Aufgabe:

/// <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) { }

0voto

Christo Punkte 2308

Ok, so gibt es nicht viel falsch mit der Art, wie Sie es derzeit tun. Außer wenn Sie entschlossen waren, als linq Ausdruck hinzufügen, dann verwenden Sie das folgende Beispiel.

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

Wenn sowohl Artist als auch Name leer oder ungültig sind, wird trotzdem alles zurückgegeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X