LINQ to Entities 和 String.StartsWith 的问题

Posted

技术标签:

【中文标题】LINQ to Entities 和 String.StartsWith 的问题【英文标题】:Problem with LINQ to Entities and String.StartsWith 【发布时间】:2010-11-02 16:35:08 【问题描述】:

我正在尝试使用 LINQ to Entities 构建搜索页面,但以下代码给了我一个关于 l.t.e. 的运行时错误。无法识别 'Boolean StartsWith()。代码编译得很好。与将 StartsWith 过滤到存储过程相比,我怎样才能更好地解决这个问题?

    return from dp in dents.DirectoryPersonEntrySet
           where
               ((dp.LastName.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) ||
                (dp.Department.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) ||
                dp.Extension.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase))
           select dp;

【问题讨论】:

您能发布“以下代码”吗?还是主题是完整的代码?你的意思是 String.StartsWith 而不是 Boolean.StartsWith? @Rutger,谢谢,我太快点击发送并忘记了代码。我还修复了签名。 至少多出6个括号,我们还缺少函数原型和类定义... 尝试使用没有 StringComparison.CurrentCultureIgnoreCase 的 StartsWith 重载。 我没有用过LINQ to Entities所以不知道它是否支持通配符,但是不能用“like”加通配符吗? 【参考方案1】:

我猜 EF 不支持采用 StringComparison 参数的 StartsWith 的重载。

应该支持StartsWithEndsWithContains,或许你可以试试:

dp.LastName.StartsWith(searchTerm)

或:

dp.LastName.ToLower().StartsWith(searchTerm)

然后确保searchTerm 也是小写。

【讨论】:

猜对了,但请注意转换为 SQL 时不区分大小写。 可能(可能)不区分大小写。这取决于数据库排序规则设置 它将其转换为分别带有 'my string%'、'%my string' 和 '%my string%' 的 LIKE 语句,自动不区分大小写,无法指定为通过此调用区分大小写 救命稻草。我花了一个小时调查它,并没有注意到我使用了重载方法。 +1 如果您使用 SQLite,这三种方法每次都不会按预期工作......

以上是关于LINQ to Entities 和 String.StartsWith 的问题的主要内容,如果未能解决你的问题,请参考以下文章

LINQ to Entities 无法识别方法 'Newtonsoft.Json.Linq.JToken get_Item(System.String)' 方法,

为啥 LINQ to Entities 无法识别方法 'System.String ToString()?

LINQ to Entities 无法识别方法“System.String ToString(Int32)”

LINQ to Entities 无法识别方法 IsNullOrWhiteSpace

LINQ to Entities 不识别方法“System.String ToString() 的解决方法

LINQ to Entities 无法识别方法“System.String Format(System.String, System.Object, System.Object)”