C# 在linq中动态选择属性
我有一个属性,其名称位于变量(C# 在linq中动态选择属性,c#,linq,dynamic-linq,C#,Linq,Dynamic Linq,我有一个属性,其名称位于变量(userFilters.property)中,可以是string/enum/number类型 我想动态地选择该属性的不同值。我该怎么做呢 var query = CreatePincodeQuery(useFilters); //userFilters.property contains the property to be selected Expression<Func<PincodeData, st
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.;
var query=CreatePincodeQuery(使用过滤器);
//userFilters.property包含要选择的属性
表达式selectExpr=null;
IList list=query.Select(selectExpr)
.Distinct()
.OrderBy(selectExpr)
.ToList();
返回列表。;
我应该创建类型为expression selectExpr
的表达式,以用作select&orderBy块的一部分
我该怎么做
我查看了提供的解决方案,但无法理解如何修改这些解决方案以满足我的需要
编辑
提出了下面的解决方案,正如预期的那样,它不起作用,以及如何将值转换为字符串
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();
}
Func CreateNewStatement(字符串字段)
{
//https://stackoverflow.com/questions/16516971/linq-dynamic-select
var xParameter=表达式参数(typeof(tenty),“o”);
var property=Expression.property(xParameter,typeof(tenty).GetProperty(field));
var lambda=表达式.lambda(属性,xParameter);
返回lambda.Compile();
}
编辑
我将类型从字符串更改为对象,但在为枚举类型创建lambda时仍然失败,原因可能是什么您的编辑是正确的方法:动态构建表达式。要转换为字符串:所有类型(此处可用)最终都从object派生,并且可以重写
ToString
…您需要获取属性(正如您所做的那样),该属性将为您提供属性类型的结果;然后调用ToString
:即属性表达式和方法调用表达式。@Richard我尝试过你的方法,它适用于字符串/数字类型,但我仍然从enum
类型中得到错误,即使在转换为对象
,有点奇怪,不明白为什么您可以提供方法调用表达式的示例您看过以下内容吗: