Verwenden Sie dynamische Parameter, um OrderBy-Ausdrücke in LINQ anzupassen
Mit der OrderBy-Erweiterungsmethode von LINQ können Sie eine Sammlung von Objekten basierend auf einer oder mehreren Eigenschaften sortieren. Aber wie legen Sie anhand der als Parameter übergebenen Werte fest, welche Eigenschaften sortiert werden sollen?
Hintergrund:
Der folgende Code zeigt die grundlegende Verwendung von OrderBy, wobei die Eigenschaften fest codiert sind:
<code class="language-csharp">List<student> existingStudends = new List<student>{ new Student {...}, new Student {...}}; List<student> orderbyAddress = existingStudends.OrderBy(c => c.Address).ToList();</code>
Dynamische Attributspezifikation:
Um die zu sortierenden Eigenschaften dynamisch anzugeben, können Sie Reflektion nutzen, um den erforderlichen Ausdrucksbaum zu erstellen. Hier ist eine Erweiterungsmethode, die diese Funktionalität implementiert:
<code class="language-csharp">public static IQueryable<TEntity> OrderBy<TEntity>(this IQueryable<TEntity> source, string orderByProperty, bool desc) { string command = desc ? "OrderByDescending" : "OrderBy"; var type = typeof(TEntity); 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<TEntity>(resultExpression); }</code>
wobei orderByProperty
der Name der Eigenschaft ist, die Sie sortieren möchten, und desc
bestimmt, ob in absteigender Reihenfolge (true) oder aufsteigender Reihenfolge (false) sortiert werden soll.
Verwendung:
Mit dieser Erweiterungsmethode können Sie jetzt dynamisch nach jedem Attribut sortieren:
<code class="language-csharp">string param = "City"; List<student> orderbyAddress = existingStudends.OrderBy("City", true).ToList(); // 按城市降序排序 List<student> orderbyName = existingStudends.OrderBy("Name", false).ToList(); // 按名称升序排序</code>
Das obige ist der detaillierte Inhalt vonWie kann ich die Sort-Eigenschaft in einer LINQ-OrderBy-Klausel dynamisch angeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!