1

我必须通过字段 EmployeeId 进行搜索。我也有参数empId,它可以是这样的:'123' 在我的数据库中有下一个值:

'0123' - what I need 
'10123'
'1234'

等等。我的目标 - 获取以empId 结尾并且没有或有一个或多个前导 0 的记录。我试着写这样的东西:

var result = from member in MembersSet
             where SqlMethods.Like(member.EmployeeId, "%" + empId) &&
                   !(SqlMethods.Like(member.EmployeeId, "%[^0]%" + empId))
             select member.Id;

但我得到一个错误 LINQ to Entities does not recognize the method 'Boolean Like(System.String, System.String)' method, and this method cannot be translated into a store expression.

可能有解决方法吗?

4

1 回答 1

1

SqlMethods 用于 Linq-To-Sql,而不是 EntityFramework。EF 有一个等效项 - SqlFunctions (System.Data.Objects.SqlClient.SqlFunctions)。您可以使用PatIndex函数来做您想做的事情。值得注意的是,这将使您的代码特定于 SQL Server。

您可以使用标准的 String EndsWith 函数在不使用 PatIndex 的情况下执行初始表达式,该函数将由 EF 自动翻译。

var result = from member in MembersSet
             where member.Id.EndsWith("123")
                 && SqlFunctions.PatIndex("[^0]%123", member.Id) == 0
             select member.Id;

如果 Id 的值始终是数字(即使带有前导零),您可以尝试将它们转换为服务器上的整数,方法是定义一个额外的方法来处理解析为 int(EF 不会翻译 Int32.Parse) - 看到这个问题的详细信息。

于 2012-05-17T09:33:53.887 回答