Wenn Sie OrderBy zum Sortieren einer Abfrage verwenden, müssen Sie den Typ des Sortierausdrucks angeben. In einigen Fällen ist der Typ jedoch zum Zeitpunkt der Kompilierung möglicherweise nicht bekannt, was die Sortierung anhand von Zeichenfolgenspaltennamen schwierig macht.
Um dieses Problem zu lösen, können wir eine generische Erweiterungsmethode erstellen, die den Spaltennamen als Zeichenfolge empfängt und den Sortierausdruck basierend auf der Reflexion dynamisch generiert. Das Folgende ist die geänderte Codeversion:
<code class="language-csharp">public static IQueryable<T> ApplySortFilter<T>(this IQueryable<T> query, string columnName) { var type = typeof(T); var property = type.GetProperty(columnName); var parameter = Expression.Parameter(type, "o"); var propertyAccess = Expression.MakeMemberAccess(parameter, property); var sortExpression = Expression.Lambda(propertyAccess, parameter); return query.OrderBy(sortExpression); }</code>
Dieser aktualisierte Code verwendet Reflektion, um Eigenschaften basierend auf den bereitgestellten Spaltennamen abzurufen und so einen dynamischen Sortierausdruck zu erstellen. Sie können es nun wie folgt verwenden:
<code class="language-csharp">var sortedQuery = query.ApplySortFilter("ColumnName");</code>
Wobei „ColumnName“ der Name der zu sortierenden Spalte ist.
Wie in der bereitgestellten Antwort vorgeschlagen, besteht ein anderer Ansatz darin, eine benutzerdefinierte Erweiterungsmethode zu verwenden, die den Typ und den Sortierausdruck als Parameter akzeptiert:
<code class="language-csharp">public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string ordering, params object[] values) { var type = typeof(T); // ... (其余代码与之前相同) }</code>
Diese Methode kann wie folgt verwendet werden:
<code class="language-csharp">var sortedQuery = query.OrderBy<T>("ColumnName");</code>
Durch die Verwendung einer dieser beiden Methoden können Sie unabhängig vom zugrunde liegenden Typ dynamisch eine Sortierung auf ein IQueryable mithilfe von String-Spaltennamen anwenden.
Das obige ist der detaillierte Inhalt vonWie ordne ich IQueryable dynamisch mithilfe eines String-Spaltennamens an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!