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
Susan SarandonOriginal
2025-01-10 11:21:42536Durchsuche

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.

<code class="language-csharp">List<student> existingStudents = new List<student> { ... };
string param = "City";</code>

Standardimplementierung:

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

<code class="language-csharp">List<student> orderedByAddress = existingStudents.OrderBy(c => c.Address).ToList();</code>

Dynamische Umsetzung:

Durch Reflexion können Sie einen dynamischen Ausdruck erstellen:

<code class="language-csharp">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);
}</code>

Verwendung:

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

<code class="language-csharp">List<student> orderbyAddress = existingStudents.OrderBy("City", true); // 降序
List<student> orderbyName = existingStudents.OrderBy("Name", false); // 升序</code>

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!

Stellungnahme:
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