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; }
}
Run Code Online (Sandbox Code Playgroud)
但MSDN文档中没有一个真正告诉您如何准确地初始化成员.
我有限的理解是你通常不需要传递会员信息; 从参数中获取(按位置)arguments参数.该会员信息旨在帮助之类的匿名类型,它打交道时,一些内部的API(我怀疑)看(在C#),如它们被成员初始化(像一个对象的初始化),但它实际上是由构造函数初始化.这意味着像LINQ-to-SQL这样的东西会看到一个constcutor使用,然后(在查询的下一部分)访问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");
Run Code Online (Sandbox Code Playgroud)
如果你确实需要它们,我希望它们相对于"arguments"表达式是位置的 - 所以你要传入(在数组中)id和name的成员.请注意,intialzer样式绑定还有一个单独的表达式.
| 归档时间: |
|
| 查看次数: |
771 次 |
| 最近记录: |