【发布时间】:2019-12-28 06:26:27
【问题描述】:
如何获取这个 OrderBy 表达式树并使其接受任何 Order 类型、int、float、string、boolean 等?可能吗?现在它的类型转换为仅字符串。我应该在调用方法时将所有内容都转换为字符串,还是有更好的方法来使其更通用?
我只需要T类中这个propertyName的数据类型,所以我可以放在下面的函数中。测试这些,还没有运气。
会员类型, 获取类型(), 字段类型
OrderBy Expression Tree in Net Core Linq for Extension Method
创建表达式:
public static class ExpressionTreesExtesion
{
public static Expression<Func<T,string>> OrderByExpression<T>(this IEnumerable<T> enumerable, string propertyName)
{
var propInfo = typeof(T).GetProperty(propertyName);
var collectionType = typeof(T);
var parameterExpression = Expression.Parameter(collectionType, "x");
var propertyAccess = Expression.MakeMemberAccess(parameterExpression, propInfo);
var orderExpression = Expression.Lambda<Func<T,string>>(propertyAccess, parameterExpression);
return orderExpression;
}
}
如何调用:
var ProductExpression = records.OrderByExpression("Name");
var result = records.OrderBy(ProductExpression.Compile());
ProductExpression.Compile() above will compile into x => x.Name, where column name is supplied at the run-time
【问题讨论】:
-
用 Func
替换 Func 并修复产生的错误。 -
@RandomUs1r 它告诉我生成空字段类,只需要T类中这个propertyName的数据类型,所以我可以放在下面的函数中,测试这些MemberType、GetType()、FieldType跨度>
-
@RandomUs1r Propertyname 将始终是一个字符串,但它可以引用可能具有不同数据类型的不同字段(Product 是 int,ProductName 是 string,Productamount 是 float 等)
标签: c# .net linq .net-core expression-trees