在linq中动态选择属性

时间:2015-01-06 12:32:27

标签: c# linq dynamic-linq

我有一个属性,其名称在变量(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。

我该怎么做?

我查看了hereherehere提供的解决方案,但无法理解如何修改这些解决方案以满足我的需求。

修改

提出了以下解决方案,正如预期的那样无效,以及如何将值转换为字符串。

    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时仍然失败,原因可能是什么

0 个答案:

没有答案