ASP.NET MVC 搜索页面 - Linq + EF4 上的整数开头

Lui*_*lar 1 c# mysql linq linq-to-entities entity-framework

因此,在我的上一篇文章中,我询问如何使用 LINQ 和 EF4 构建动态搜索过滤器(请参阅此处),最后提出了将表达式构建为字符串并使用动态 LINQ 库将其解析为表达式的解决方案。

我解决了这个问题。我能够生成 aExpression<Func<TSource, out bool>>并将其传递给Where()的方法DbSet。我还尝试使用 MySql 作为 EF4 背后的数据库来做到这一点。

当我尝试对整数应用字符串操作时,问题就出现了,比如搜索连续数字以 1234 开头的数据库记录。

我最初的表情是这样的:record.ConsecutiveNumber.ToString().StartsWith("1234")。遗憾的是,正如预期的那样,事情并不那么容易,因为 EF4 无法查询DbSet异常:

“LINQ to Entities 无法识别‘System.String ToString()’方法,并且该方法无法转换为存储表达式。”

经过一番谷歌搜索后,我发现这是一个常见问题。但是来吧!有没有办法执行搜索功能,可以搜索以“1234”开头的连续编号的记录?

专业人士如何使用 EF4 实现搜索功能?这是使用单个属性过滤器的情况。如果我想添加多个过滤器怎么办?天哪,我的头好痛……:/

谢谢!

编辑:

想法#1:存储过程怎么样?从 Linq 调用 MySql 存储过程怎么样?我的目标是否太高了?

Kir*_*oll 5

您可以使用SqlFunctions.StringConvert方法。它需要一个double(或decimal) 所以你必须强制转换你的 int ConsecutiveNumber

代替:

record.ConsecutiveNumber.ToString().StartsWith("1234")
Run Code Online (Sandbox Code Playgroud)

和:

SqlFunctions.StringConvert((double)record.ConsecutiveNumber).StartsWith("1234")
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

3834 次

最近记录:

14 年,7 月 前