此代码可以正常工作:
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);
}
答案 0 :(得分:0)
如何将计算转换为属性(这也有利于封装MyClass细节):
public class MyClass
{
public int GetSum
{
get { return Field1 + Field2 + Field3 + Field4; }
}
}
criteria.Add(Restrictions.Where<MyClass>(x => x.GetSum > myVariable));