Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ中的IsNull或合并功能?_Linq_Nhibernate - Fatal编程技术网

LINQ中的IsNull或合并功能?

LINQ中的IsNull或合并功能?,linq,nhibernate,Linq,Nhibernate,我有以下LINQ查询: return (from r in Repository.Query<Measurement>() where r.Postal.ToLowerInvariant() == (string.IsNullOrEmpty(postalCode) ? r.Postal : postalCode).ToLowerInvariant()

我有以下LINQ查询:

return (from r in Repository.Query<Measurement>()
        where
            r.Postal.ToLowerInvariant() ==
                (string.IsNullOrEmpty(postalCode)
                    ? r.Postal : postalCode).ToLowerInvariant()
            &&
            r.Trait.ToLowerInvariant() ==
                (string.IsNullOrEmpty(trait)
                    ? r.Trait : trait).ToLowerInvariant()
        select r).ToList();
就这样。没有更多关于我做错了什么的线索。帮忙


编辑:当我查询内存中的对象列表时,此查询起作用。当我移动到NHibernate对db执行时,我就开始出现异常。

尝试重构IsNullOrEmpty条件,如下所示:

return (from r in Repository.Query<Measurement>()
    where
        (string.IsNullOrEmpty(postalCode)
            || r.Postal.ToLowerInvariant() == postalCode.ToLowerInvariant()
        )
        &&
        (string.IsNullOrEmpty(trait)
            || r.Trait.ToLowerInvariant() == trait.ToLowerInvariant()
        )
    select r).ToList();
返回(来自Repository.Query()中的r)
哪里
(string.IsNullOrEmpty(postalCode)
||r.Postal.ToLowerInvariant()==postalCode.ToLowerInvariant()
)
&&
(string.IsNullOrEmpty(trait)
||r.Trait.ToLowerInvariant()==Trait.ToLowerInvariant()
)
选择r.ToList();

这可能会导致LINQ在发送查询之前计算IsNullOrEmpty。如果没有,您可以手动预先计算它们,并在它们的位置放置一对布尔变量。

您是否尝试过在where子句之前调用
Repository.Query().ToList()
来强制延迟执行?我注意到NHibernate似乎正在尝试将
string.IsNullOrEmpty()
调用转换为SQL语法(但失败)

return(从Repository.Query().ToList()中的r返回)
哪里
r、 邮政编码:ToLowerInvariant()==
(string.IsNullOrEmpty(postalCode)
r.邮政编码:postalCode).ToLowerInvariant()
&&
r、 Trait.ToLowerInvariant()==
(string.IsNullOrEmpty(trait)
?r.特征:特征)。ToLowerInvariant()
选择r.ToList();

您可以发布堆栈跟踪吗?我看不出一元运算符“Not”在何处被使用。如果删除对
ToLowerInvariant()
的调用,是否仍会出现错误?如果您确定测量值不会超过100左右,您可以在内存中对其进行筛选。这是不受支持的,但从技术上讲,编写支持它的代码并将其作为NHiberante的补丁提交并不难。@Paco,如果我确切知道堆栈跟踪的含义,我可能会被迫尝试,但我对LINQ表达式的本质一无所知,而且我真的没有时间成为它们的专家。
return (from r in Repository.Query<Measurement>()
    where
        (string.IsNullOrEmpty(postalCode)
            || r.Postal.ToLowerInvariant() == postalCode.ToLowerInvariant()
        )
        &&
        (string.IsNullOrEmpty(trait)
            || r.Trait.ToLowerInvariant() == trait.ToLowerInvariant()
        )
    select r).ToList();
return (from r in Repository.Query<Measurement>().ToList()
        where
            r.Postal.ToLowerInvariant() ==
                (string.IsNullOrEmpty(postalCode)
                    ? r.Postal : postalCode).ToLowerInvariant()
            &&
            r.Trait.ToLowerInvariant() ==
                (string.IsNullOrEmpty(trait)
                    ? r.Trait : trait).ToLowerInvariant()
        select r).ToList();