5

このコードは正常に動作します:

ICriteria criteria = GetSession().CreateCriteria<MyClass>();
criteria.Add(Restrictions.Where<MyClass>(x => x.Field1 >= myVariable));

ただし、次のコードは機能しません。

criteria.Add(Restrictions        
        .Where<MyClass>(x =>          
        (x.Field1 +
        x.Field2 +
        x.Field3 +
        x.Field4) >= myVariable));

上記のコードを実行すると、次のエラーが発生します。

タイプ 'myClass' の変数 'x' がスコープ '' から参照されていますが、定義されていません

助けてください(下手な英語でごめんなさい)。

サラ

編集 1

私の一時的な解決策は次のとおりです。

var result = criteria.List<MyClass>();    
result.Where(x => (x.Field1 + x.Field2 + x.Field3 + x.Field4 >= myVariable));

そしてこの作品。選択の前に Where 句を入れたいと思います...

編集 2

最終的な解決策は次のとおりです(@mhoffから提案されたとおり):

var result = criteria.List<MyClass>();    
result.Where(x => this.GetSum(x) >= myVariable);

... do something ...

... ToList()


private int GetSum(MyClass x) {
 return (x.Field1 + x.Field2 + x.Field3 + x.Field4);
}
4

2 に答える 2

0

計算をプロパティに変換するのはどうですか(これには、MyClassの詳細をカプセル化するという利点もあります)。

public class MyClass
{
    public int GetSum
    {
        get { return Field1 + Field2 + Field3 + Field4; }
    }
}

criteria.Add(Restrictions.Where<MyClass>(x => x.GetSum > myVariable));
于 2012-09-13T20:27:16.610 に答える
0

がof の場合Restictionsは、追加と選択を分割してみてください:IEnumerableMyClass

var v = Restrictions
    .Where(x =>(x.Field1 + x.Field2 +  x.Field3 + x.Field4) >= myVariable));

criteria.Add(v);
于 2012-08-17T11:16:51.883 に答える