Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在linq中动态选择属性_C#_Linq_Dynamic Linq - Fatal编程技术网

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
类型中得到错误,即使在转换为
对象
,有点奇怪,不明白为什么您可以提供方法调用表达式的示例您看过以下内容吗: