我正在尝试以下查询:
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"))
它不起作用。
任何提示?
答案 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
将写入数据库)。
希望有所帮助!