Lan*_*eyo 9 c# linq nhibernate
我有一些使用nHibernate的LINQ查询代码,当它执行时,它抛出一个PartialEvaluationExceptionExpression.这究竟是什么意思,我能做些什么呢?
SomeIqueryableNhibernateObject
.Where(x=>...
some expression
&& !Model.date.HasValue ? true : (x.fooDate.Date == Model.date.Value.Date)
&& some expresion
Run Code Online (Sandbox Code Playgroud)
模型是:
public class Filter
{
DateTime? date;
}
Run Code Online (Sandbox Code Playgroud)
异常是由三元运算符的错误路径引起的:
x.fooDate.Date == Model.date.Value.Date
Run Code Online (Sandbox Code Playgroud)
即使我将其修改为:
x.fooDate != null && Model.date.HasValue && x.fooDate.Date == Model.date.Value.Date
Run Code Online (Sandbox Code Playgroud)
它仍然抛出异常.
您正在运行获取null
对象值的代码,因此抛出它.当查询提供程序尝试将该查询转换为数据库可以执行的某些内容时,需要将Model.date.Value.Date
其解析为其值,以便可以在查询中使用该值.由于没有值,代码会中断.
解决方案当然是不要将这样的检查内联到查询本身.在查询上下文之外确定是否应该添加此检查,然后仅在需要时添加它:
var query = CreateInitialQuery();
if(Model.date.HasValue)
query = query.Where(x => x.fooDate.Date == Model.date.Value.Date);
Run Code Online (Sandbox Code Playgroud)
在这里,查询提供程序只被赋予一个值来评估何时实际存在要评估的值.
归档时间: |
|
查看次数: |
2346 次 |
最近记录: |