我已经查看了SO上的很多帖子,并提出了许多不同的答案 - 这些答案似乎都不起作用,或者根据代码版本等相互矛盾。
我更倾向于避开“AsEnumerable()”修复,因为据我所知,这会在应用查询之前评估所有结果...我想先运行查询,以便结果中的数据为尽可能小。
有关信息:我查询的表可以包含+2百万行。
我的要求:
通过实体框架在SQL Server(Compact或Standard)的Integer列上的“Contains”函数。这将允许用户输入要搜索的号码,而不具有可用的完整号码。结合其他谓词,这在减少返回的数据量方面变得非常强大。
e.g。
f=>f.Id.ToString().Contains("202")<br/>
这当前失败,因为“ToString()”无法转换为Entity Store命令。
或作为T-SQL等价物
cast(Id as varchar(9)) LIKE '%202%'
版本:
EF5
.Net 4.0
SQL Server 2008 Standard或SQL Compact
答案 0 :(得分:1)
您可以使用SqlFunctions.StringConvert
f=> SqlFunctions.StringConvert((double) f.Id).Contains("202")
int
没有超载,因此您必须将其投放到double
或decimal
答案 1 :(得分:1)
首先,您可以尝试使用此功能:SqlFunctions.StringConvert
f=>SqlFunctions.StringConvert((double)f.id)).Contains("202")
int没有重载因此你必须将类型转换为double。此函数将转换为数据库中的相应函数。
另一种解决方案是创建存储过程并从EF调用它:
objectContext.ExecuteSqlCommand("storedProcedureName", SqlParameters)
或
objectContext.ExecuteStoreQuery<ResultType>("storedProcedureName", SqlParameters)