【问题标题】:Problem with LINQ to Entities and String.StartsWithLINQ to Entities 和 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”加通配符吗?

标签: .net linq entity-framework linq-to-entities


【解决方案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,这三种方法每次都不会按预期工作......
猜你喜欢
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 1970-01-01
  • 2011-01-30
  • 2011-01-27
相关资源
最近更新 更多