gpt4 book ai didi

c# - 什么是 PartialEvaluationExceptionExpression 以及如何修复它?

转载 作者:太空狗 更新时间:2023-10-29 17:49:22 25 4
gpt4 key购买 nike

我有一些使用 nHibernate 的 LINQ 查询代码,当它执行时,它抛出一个 PartialEvaluationExceptionExpression。这到底是什么意思,我该怎么办?

SomeIqueryableNhibernateObject
.Where(x=>...
some expression
&& !Model.date.HasValue ? true : (x.fooDate.Date == Model.date.Value.Date)
&& some expresion

模型在哪里:

public class Filter
{
DateTime? date;
}

异常是三元运算符路径错误导致的:

x.fooDate.Date == Model.date.Value.Date

即使我修改为:

x.fooDate != null && Model.date.HasValue && x.fooDate.Date == Model.date.Value.Date

它仍然抛出异常。

最佳答案

您正在运行获取 null 对象值的代码,因此它会被抛出。当查询提供程序试图将该查询转换为数据库可以执行的内容时,它需要将 Model.date.Value.Date 解析为它的值,以便可以在查询中使用该值。由于没有值(value),代码中断。

解决方案当然是不要将这样的检查内联到查询本身。在查询上下文之外确定您是否应该添加此检查,然后仅在需要时添加它:

var query = CreateInitialQuery();
if(Model.date.HasValue)
query = query.Where(x => x.fooDate.Date == Model.date.Value.Date);

此处,查询提供者仅在实际存在要评估的值时才被赋予评估值。

关于c# - 什么是 PartialEvaluationExceptionExpression 以及如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28375310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com