【发布时间】:2012-08-16 12:46:32
【问题描述】:
这段代码运行良好:
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);
}
【问题讨论】:
-
看起来这不是 Linq 中的
Where方法。它是您编写的还是来自您正在使用的库?看起来它对你传递的表达式做了一些时髦的事情。 -
@applechewer:只有 GetSession() 是我写的方法。其他的都是 NHibernate 方法。
-
这和多行无关? stackoverflow.com/questions/5653703/… 不应该,只是猜测。您可以尝试将 {} 添加到 lambda 以确保。
-
@AndreasReiff:即使在队列中,我也会遇到同样的错误
标签: c# fluent-nhibernate restrictions