【发布时间】:2011-06-08 01:56:17
【问题描述】:
我在类库项目中有一个名为Product 的类。我正在使用SubSonic SimpleRepository 来持久化对象。我在Product类中有一个方法如下:
public static IList<Product> Load(Expression<Func<Product, bool>> expression)
{
var rep=RepoHelper.GetRepo("ConStr");
var products = rep.Find(expression);
return products.ToList();
}
我这样调用这个函数:
private void BindData()
{
var list = Product.Load(x => x.Active);//Active is of type bool
rptrItems.DataSource = list;
rptrItems.DataBind();
}
从BindData 调用Load 会引发异常:
variable 'x' of type 'Product' referenced from scope '', but it is not defined
我该如何解决这个问题。
编辑:- 通过单步执行SubSonic 代码,我发现此函数引发了错误
private static Expression Evaluate(Expression e)
{
if(e.NodeType == ExpressionType.Constant)
return e;
Type type = e.Type;
if(type.IsValueType)
e = Expression.Convert(e, typeof(object));
Expression<Func<object>> lambda = Expression.Lambda<Func<object>>(e);
Func<object> fn = lambda.Compile(); //THIS THROWS EXCEPTION
return Expression.Constant(fn(), type);
}
【问题讨论】:
-
看起来像 SubSonic 中的错误。 (@Kobi:没有。)
标签: c# lambda subsonic3 linq-expressions