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 存储过程怎么样?我的目标是否太高了?
您可以使用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 次 |
| 最近记录: |