Heim >Backend-Entwicklung >C++ >Wie kann ich das OrderBy-Feld in LINQ dynamisch angeben?
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!