因此,在我的上一篇文章中,我询问了如何使用 LINQ 和 EF4 (See Here) 构建动态搜索过滤器,并最终提出了将表达式构建为字符串并使用动态 LINQ 库。
我解决了这个问题。我能够生成 Expression<Func<TSource, out bool>>
并将其传递给 Where()
DbSet
的方法.我还尝试使用 MySql 作为 EF4 背后的数据库来执行此操作。
当我尝试将字符串操作应用于整数时出现问题,例如搜索以 1234 开头的连续数字的数据库记录。
我最初的表达是这样的:record.ConsecutiveNumber.ToString().StartsWith("1234")
.遗憾的是,正如预期的那样,事情并没有那么容易,因为 EF4 无法查询 DbSet
有异常(exception):
"LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression."
经过一些谷歌搜索,我发现这是一个常见问题。但是来吧!有没有一种方法可以执行搜索功能,可以搜索以“1234”开头的连续数字的记录?
专业人员如何使用 EF4 实现搜索功能?这是一个单一的属性过滤器。如果我想添加多个过滤器怎么办?天哪,我的头好痛……:/
谢谢!
编辑:
想法 #1:存储过程怎么样?从 Linq 调用 MySql 存储过程怎么样?我的目标是不是太高了?
最佳答案
您可以使用 SqlFunctions.StringConvert方法。它需要一个 double
(或 decimal
),所以你必须转换你的 int ConsecutiveNumber
。
替换:
record.ConsecutiveNumber.ToString().StartsWith("1234")
与:
SqlFunctions.StringConvert((double)record.ConsecutiveNumber).StartsWith("1234")
关于c# - ASP.NET MVC 搜索页面 - Linq + EF4 上的整数 StartsWith,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5446939/