Heim > Backend-Entwicklung > C++ > Wie kann ich das OrderBy-Feld in LINQ dynamisch angeben?

Wie kann ich das OrderBy-Feld in LINQ dynamisch angeben?

Susan Sarandon
Freigeben: 2025-01-10 11:21:42
Original
540 Leute haben es durchsucht

How Can I Dynamically Specify the OrderBy Field in LINQ?

Dynamische Spezifikation von LINQ OrderBy-Parametern

In Szenarien, in denen Sie die in der LINQ-OrderBy-Operation verwendeten Felder dynamisch angeben müssen, können Sie dies mithilfe der Reflexionstechnologie erreichen.

Beispiel:

Angenommen, es gibt eine Liste von Schülern existingStudents und einen Parameter param, der das zu sortierende Feld darstellt.

List<student> existingStudents = new List<student> { ... };
string param = "City";
Nach dem Login kopieren

Standardimplementierung:

Die Standardmethode ruft OrderBy mit einem hartcodierten Eigenschaftsnamen zum Sortieren auf:

List<student> orderedByAddress = existingStudents.OrderBy(c => c.Address).ToList();
Nach dem Login kopieren

Dynamische Umsetzung:

Durch Reflexion können Sie einen dynamischen Ausdruck erstellen:

public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string orderByProperty, bool desc)
{
    // 确定排序表达式
    string command = desc ? "OrderByDescending" : "OrderBy";
    var type = typeof(T);
    var property = type.GetProperty(orderByProperty);
    var parameter = Expression.Parameter(type, "p");
    var propertyAccess = Expression.MakeMemberAccess(parameter, property);
    var orderByExpression = Expression.Lambda(propertyAccess, parameter);

    // 构建动态查询表达式
    var resultExpression = Expression.Call(typeof(Queryable), command, new Type[] { type, property.PropertyType },
                                   source.Expression, Expression.Quote(orderByExpression));
    return source.Provider.CreateQuery<T>(resultExpression);
}
Nach dem Login kopieren

Verwendung:

Mit der OrderBy-Erweiterungsmethode ist es jetzt möglich, dynamisch nach jedem Attribut zu sortieren:

List<student> orderbyAddress = existingStudents.OrderBy("City", true); // 降序
List<student> orderbyName = existingStudents.OrderBy("Name", false); // 升序
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich das OrderBy-Feld in LINQ dynamisch angeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage