如何在EF5整数列和SQL Server上执行“包含/喜欢”?例如Name.Contains(“Fred”)的整数版本

时间:2012-11-27 08:53:39

标签: c# sql-server entity-framework

我已经查看了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

2 个答案:

答案 0 :(得分:1)

您可以使用SqlFunctions.StringConvert

f=> SqlFunctions.StringConvert((double) f.Id).Contains("202")

int没有超载,因此您必须将其投放到doubledecimal

答案 1 :(得分:1)

首先,您可以尝试使用此功能:SqlFunctions.StringConvert

f=>SqlFunctions.StringConvert((double)f.id)).Contains("202")

int没有重载因此你必须将类型转换为double。此函数将转换为数据库中的相应函数。

另一种解决方案是创建存储过程并从EF调用它:

objectContext.ExecuteSqlCommand("storedProcedureName", SqlParameters)

objectContext.ExecuteStoreQuery<ResultType>("storedProcedureName", SqlParameters)