我有一个属性,其名称在变量(userFilters.property
)中,可以是string / enum / number类型。
我想动态选择该属性的不同值。我该怎么做。
var query = CreatePincodeQuery(useFilters);
//userFilters.property contains the property to be selected
Expression<Func<PincodeData, string>> selectExpr = null;
IList<string> list = query.Select(selectExpr)
.Distinct()
.OrderBy(selectExpr)
.ToList();
return list.;
我应该创建Expression<Func<PincodeData, string>> selectExpr
类型的表达式,作为select&amp; amp;的一部分。 orderBy block。
我该怎么做?
我查看了here,here和here提供的解决方案,但无法理解如何修改这些解决方案以满足我的需求。
修改
提出了以下解决方案,正如预期的那样无效,以及如何将值转换为字符串。
Func<TEntity, string> CreateNewStatement<TEntity>(string field)
{
//https://stackoverflow.com/questions/16516971/linq-dynamic-select
var xParameter = Expression.Parameter(typeof(TEntity), "o");
var property = Expression.Property(xParameter, typeof(TEntity).GetProperty(field));
var lambda = Expression.Lambda<Func<TEntity, string>>(property, xParameter);
return lambda.Compile();
}
修改
我将类型从字符串更改为对象,但在为枚举类型创建lambda时仍然失败,原因可能是什么