C# Lambda编译抛出;变量'';类型为'';参考范围'';,但它并没有定义;

C# Lambda编译抛出;变量'';类型为'';参考范围'';,但它并没有定义;,c#,expression-trees,runtime-compilation,C#,Expression Trees,Runtime Compilation,当我试图编译如下所示的lambda时,它抛出: 类型为“System.Collections.Generic.IEnumerable”1[WheelEndCatalogKendo.Models.SapBasicData]”的变量“model”从作用域“”引用,但未定义该变量 public static GridBoundColumnBuilder<TModel> BuildColumnString<TModel>(this GridBoundColumnBuilder&l

当我试图编译如下所示的lambda时,它抛出:

类型为“System.Collections.Generic.IEnumerable”1[WheelEndCatalogKendo.Models.SapBasicData]”的变量“model”从作用域“”引用,但未定义该变量

public static GridBoundColumnBuilder<TModel> BuildColumnString<TModel>(this GridBoundColumnBuilder<TModel> column, WebViewPage<IEnumerable<TModel>> webViewPage, int width) where TModel : class {
    var modelParameter = Expression.Parameter(typeof(IEnumerable<TModel>), "model");
    Expression<Func<IEnumerable<TModel>, TModel>> firstItem = (model) => model.FirstOrDefault();
    var member = MemberExpression.Property(firstItem.Body, column.Column.Member);
    var lambda = Expression.Lambda<Func<IEnumerable<TModel>, string>>(member, modelParameter);
    var title = webViewPage.Html.DisplayNameFor(lambda).ToHtmlString();
    var header = webViewPage.Html.ShortLabelFor(lambda).ToHtmlString().FixUpNewLinesAsHtml();
    var compiled = lambda.Compile(); //Throws here with "variable '...' of type '...' referenced from scope '', but it is not defined"
....
}
public静态GridBoundColumnBuilder BuildColumnString(此GridBoundColumnBuilder列,WebViewPage,WebViewPage,int-width),其中TModel:class{
var modelParameter=表达式参数(typeof(IEnumerable),“model”);
表达式firstItem=(model)=>model.FirstOrDefault();
var member=MemberExpression.Property(firstItem.Body,column.column.member);
var lambda=Expression.lambda(成员,模型参数);
var title=webViewPage.Html.DisplayNameFor(lambda.ToHtmlString();
var header=webViewPage.Html.ShortLabelFor(lambda.ToHtmlString().FixUpNewLinesAsHtml();
var compiled=lambda.Compile();//在此处抛出从作用域“”引用的类型为“…”的“变量”…,但未定义该变量”
....
}
我看到几个类似的帖子;但到目前为止,他们还没有让我明白代码的问题。看起来我提供了lambda变量(作为第二个参数参数)。然而,我几乎没有创作表达式树的经验


有什么想法吗?

问题是
firstItem
表达式中的
model
参数与
modelParameter
不同。在表达式树中,参数不是按名称比较的,而是按引用比较的

这意味着最简单的解决方案是重用
firstItem
中的
model
参数,而不是创建自己的参数:

var modelParameter = firstItem.Parameters.Single();
通过此修改,您的代码将正常工作