在LINQ to SQL中使用包含整数

时间:2013-11-27 16:21:24

标签: vb.net linq-to-sql

我正在尝试以下查询:

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"))

它不起作用。

任何提示?

2 个答案:

答案 0 :(得分:1)

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

  

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

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

Imports System.Data.Objects.SqlClient

答案 1 :(得分:0)

Per @ 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将写入数据库)。

希望有所帮助!