首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LINQ to NHibernate和字符串比较的奇怪问题

LINQ to NHibernate和字符串比较的奇怪问题
EN

Stack Overflow用户
提问于 2010-02-21 17:28:53
回答 2查看 1.3K关注 0票数 1

我正在使用LINQ to NHibernate,在比较字符串时遇到了一个奇怪的问题。下面的代码运行良好,但当我取消注释: //MyCompareFunc(dl.DamageNumber,damageNumberSearch) &&和注释: dl.DamageNumber.Contains(damageNumberSearch) &&时,它就崩溃了,似乎MyCompareFunc()总是返回true,而dl.DamageNumber.Contains(damageNumberSearch)有时返回true,有时返回false。

换句话说,当我在LINQ query中直接使用string.Contains()时,它可以工作,但当我将它移到一个方法中时,它不工作。

代码语言:javascript
复制
    internal List<DamageList> SearchDamageList(
    DateTime? sendDateFromSearch, DateTime? sendDateToSearch, string damageNumberSearch,
    string insuranceContractSearch)
    {
        var q = from dl in session.Linq<DamageList>()
                where
                CommonHelper.IsDateBetween(dl.SendDate, sendDateFromSearch, sendDateToSearch) &&
                //MyCompareFunc(dl.DamageNumber, damageNumberSearch) &&
                dl.DamageNumber.Contains(damageNumberSearch) &&
                insuranceContractSearch == null ? true : CommonHelper.IsSame(dl.InsuranceContract, insuranceContractSearch)
                select dl;

        return q.ToList<DamageList>();
    }

    private bool MyCompareFunc(string damageNumber, string damageNumberSearch)
    {
        return damageNumber.Contains(damageNumberSearch);
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-21 17:43:26

我必须承认我不是NHibernate方面的专家,但在使用不同的对象关系管理时,我们经常遇到同样的问题。问题是,在翻译查询时,LINQ引擎能够识别来自.NET库(如Contains )的简单字符串函数,并将它们翻译成SQL等效项。此SQL等效项执行不区分大小写的比较(这取决于数据库的设置,但这通常是默认设置)。

另一方面,它不可能解析您的自定义函数的源代码,因此它不能将其转换为SQL,而只能在从数据库预加载前一个查询的结果后在内存中执行它。这意味着它将作为.NET代码执行,其中比较默认情况下区分大小写。

这可能是您的结果不匹配的原因;)

票数 2
EN

Stack Overflow用户

发布于 2010-02-21 19:42:00

Linq使用表达式,而不是编译的函数。如果您使用expression>而不是"compiled“方法,那就没问题了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2305451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档