c# - 动态构建选择子句linq

标签 c# linq select dynamic expression

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"});

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

最佳答案

这可用于创建您需要的表达式。

    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 });
    }

关于c# - 动态构建选择子句linq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27634801/

相关文章:

c# - 当发票不包含任何项目时,Linq 返回 null

c# - 加入 Linq 的最佳方式

php SELECT (count) in mysql/pdo WHERE 格式化日期

MySQL,使用 '='命令时显示不显示的数据

mysql - 选择一列中具有相同值的行,但不要选择那些单独的行

c# - 如何将结构指针从 c# 传递到 win32 DLL

c# - 如何在资源中存储目录结构?

c# - 所有 JPEG 文件都是 JFIF 吗?

c# - 从 Unity 3d 获取 applicationContext

c# - 我如何扩展这个表达式?