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 的重载。
应该支持StartsWith、EndsWith和Contains,或许你可以试试:
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)”