c# - ASP.NET MVC 搜索页面 - Linq + EF4 上的整数 StartsWith

标签 c# mysql linq entity-framework linq-to-entities

因此,在我的上一篇文章中,我询问了如何使用 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/

相关文章:

c# - 来自 C# 的 native 调用尝试读取无效内存

mysql - 启动时使用静态数据进行 Docker 集成测试

java - 优化 Hibernate session.createQuery().list();

c# - 使用 linq 避免嵌套循环

c# - Fluent nHibernate 中的嵌套查询

c# - 颜色.FromArgb(...);安全信息

mysql - 没有将字符串隐式转换为哈希(smarter_csv gem,上传带有输入的文件)

c# - LINQ to Entities 不支持“TimeOfDay” - 在 Linq 2 SQL 中查找总秒数

LINQ 的 SQL 命令(旋转)

c# - 如何在 ASP.NET MVC 2 中预先选择单选按钮?