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

如果Restictions是一个IEnumerable然后MyClass尝试划分添加和选择:

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

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