【问题标题】:Using contains on an integer in LINQ to SQL在 LINQ to SQL 中对整数使用包含
【发布时间】:2013-11-27 16:21:24
【问题描述】:

我正在尝试以下查询:

Return _context.companies _
        .Where(Function(c) c.id.StartsWith(filterCompanyId)) _
    .ToList()

但是因为id 是一个整数,所以它不起作用。我找到了this answer,这表明我可以使用

c.id.ToString().StartsWith ...

但这给了我以下错误:

LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.

尝试使用时

.Where(Function(c) SqlFunctions.StringConvert(CDbl(c.id)).StartsWith("1"))

它不起作用。

有什么建议吗?

【问题讨论】:

  • 所以如果filterCompanyId3,你想返回所有公司331302 等等。这样真的正确吗?这有意义吗?
  • 第二次尝试时收到什么错误消息?
  • 是的,没错。用户对 ID 很熟悉,并且发现很容易将公司 ID 输入到框中以快速到达那里。
  • 这应该有助于您转换为字符串:stackoverflow.com/q/1066760/87698
  • 我找到了该帖子,但无法使用 VB.net/我的 EF 版本。

标签: vb.net linq-to-sql


【解决方案1】:

相关部分隐藏在错误信息中:

'SqlFunctions' 未声明。由于其保护级别,它可能无法访问

SqlFunctions 位于 System.Data.Objects.SqlClient 命名空间中(您可以通过转到 "SqlFunctions Class" MSDN page 然后检查“命名空间:”条目来发现这一点)。因此,您需要在代码文件的顶部导入该命名空间:

Imports System.Data.Objects.SqlClient

【讨论】:

  • @SamSelikoff:你在使用 SQL Server 吗?
  • 不,我正在使用 MySQL
  • @SamSelikoff:哦,这就解释了。不幸的是,MySQL-EF-Provider 不支持 StringConvert,所以你可能需要use good old SQL instead
【解决方案2】:

根据@Heinzi 的评论,MySQL-EF-Provider 不支持 StringConvert。我最终使用了一个查询字符串:

Dim isExpiredInt As Integer = If(isExpired, 1, 0)

Dim query As String = "Select * FROM company WHERE (expired = 0 OR expired = {0}) AND name like {1} AND id like {2}"

Dim companies = _context.ExecuteStoreQuery(Of company)(
    query,
    "companies",
    System.Data.Objects.MergeOption.AppendOnly,
    isExpiredInt, "%" & filterCompanyName & "%", filterCompanyId & "%"
).ToList()

Return companies

请注意,System.Data.Objects.MergeOption.AppendOnly 是我添加的,因此来自此查询的对象将附加到我的上下文(即在此上下文中调用 SaveChanges 会写入数据库)。

希望有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2015-07-16
    • 2019-07-22
    • 1970-01-01
    相关资源
    最近更新 更多