【问题标题】:dynamically build select clause linq动态构建选择子句linq
【发布时间】:2015-02-22 10:44:53
【问题描述】:
class someClass
{ 
    public int Id { get; set; }
    public string Name{ get; set; }
    ...
    public string someProperty { get; set; }          
}

Expression<Func<someClass, object>> selector = null;
selector = k => new { k.Id ,k.Name };
var serult = myData.Select(selector);

// .Select(p=> new {p.Name , p.Id}) etc.

此示例代码正在运行 但是;

Expression<Func<someClass, ???>> createSelector(string[] fields)
{
    ...
    ....
    return ...
} 

Expression<Func<someClass, ???>> selector = createSelector({"Name","Id"});

这可能吗? 此方法在运行时创建动态选择器

【问题讨论】:

标签: c# linq select dynamic expression


【解决方案1】:

这可以用来创建你需要的表达式。

    public static Expression<Func<T, TReturn>> CreateSelector<T, TReturn>(string fieldName)
        where T : class
        where TReturn : class
    {
        ParameterExpression p = Expression.Parameter(typeof(T), "t");
        Expression body = Expression.Property(p, fieldName);
        Expression conversion = Expression.Convert(body, typeof(object));
        return Expression.Lambda<Func<T, TReturn>>(conversion, new ParameterExpression[] { p });
    }

【讨论】:

  • 我不知道返回类型(可以是匿名类型),fildName 可以乘以最佳结果stackoverflow.com/questions/16516971/linq-dynamic-select 但返回类型必须是对象或匿名类型此示例不起作用
  • @AhmetGünaydın 返回类型将是您正在查询的列表。您能否遍历多个参数,向 IQueryable 对象添加新选择?
猜你喜欢
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 2013-12-27
  • 2014-12-26
  • 2012-08-16
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
相关资源
最近更新 更多