LINQ : Dynamic select

前端 未结 10 784
北荒
北荒 2020-11-22 05:26

Consider we have this class :

    public  class Data
{
    public string Field1 { get; set; }
    public string Field2 { get; set; }
    public string Field         


        
10条回答
  •  星月不相逢
    2020-11-22 05:56

    Using Reflection and Expression bulid can do what you say. Example:

    var list = new List();
    //bulid a expression tree to create a paramter
    ParameterExpression param = Expression.Parameter(typeof(Data), "d");
    //bulid expression tree:data.Field1
    Expression selector = Expression.Property(param,typeof(Data).GetProperty("Field1"));
    Expression pred = Expression.Lambda(selector, param);
    //bulid expression tree:Select(d=>d.Field1)
    Expression expr = Expression.Call(typeof(Queryable), "Select",
        new Type[] { typeof(Data), typeof(string) },
        Expression.Constant(list.AsQueryable()), pred);
    //create dynamic query
    IQueryable query = list.AsQueryable().Provider.CreateQuery(expr);
    var result=query.ToList();
    

提交回复
热议问题