我必须通过字段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.
可能有解决方法吗?
答案 0 :(得分: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) - 有关详细信息,请参阅this question。