代码之家  ›  专栏  ›  技术社区  ›  xanadont

帮助我理解NewExpression.Members

  •  4
  • xanadont  · 技术社区  · 15 年前

    NewExpression.Members是否通知LINQ运行时如何将类型的构造函数参数映射到其属性?如果是,是否有一个属性来设置映射?我在想象这样的事情:

    public class Customer
    {
      public Customer(int id, string name)
      {
        Id = id;
        Name = name;
      }
    
      [CtorParam("id")]
      public int Id { get; set; }
    
      [CtorParam("name")]
      public string Name { get; set; }
    }
    

    但是没有一个MSDN文档真正告诉您成员是如何初始化的。

    1 回复  |  直到 15 年前
        1
  •  6
  •   Marc Gravell    15 年前

    我的 有限的 arguments 参数。这个 成员 (在C#)中,它们好像是由成员初始化的(就像对象初始化器),但实际上是由构造函数初始化的。这意味着像LINQ to SQL这样的东西将看到 捕快 使用,然后(在查询的下一部分中)访问 obj.Name -它需要一种方法来理解这意味着“构造函数的第三个参数(实际上从未被调用过)。尤其是像分组这样的事情。

    所以这很好:

            var param = Expression.Parameter(typeof(string), "name");
            var body = Expression.New(typeof(Customer).GetConstructor(new[] {typeof(int), typeof(string)}),
                Expression.Constant(1), param);
            var func = Expression.Lambda<Func<string, Customer>>(body, param).Compile();
            var cust = func("abc");
    

    如果你 如果需要它们,我希望它们相对于“arguments”表达式是位置的,这样您就可以(在数组中)传入id和name的成员。注意还有一个 分离