11

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();
}

Loadから呼び出すとBindData、例外がスローされます。

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);
}
4

1 に答える 1

14

何日も頭を壁にぶつけ、Jon Skeet に助けを求めた後、私は問題を発見しました。

問題は実際には SubSonic にあります (@Timwi は正しかった)。それはこの行にあります:

var list = Product.Load(x => x.Active);//Active is of type bool

次のように変更した後:

var list = Product.Load(x => x.Active==true);

すべてが順調でした。

于 2011-01-16T18:37:53.717 に答える