0

我查看了许多关于 SO 的帖子,并提出了许多不同的答案——没有一个似乎完全有效,或者基于代码版本等相互矛盾。

我宁愿避开“AsEnumerable()”修复,因为据我了解,这会在应用查询之前评估所有结果......我想先运行查询,以便结果中的数据尽可能小.

有关信息:我正在查询的表可以包含 +200 万行。

我的要求:

通过实体框架在 SQL Server(紧凑型或标准型)的整数列上的“包含”函数。这将允许用户输入要搜索的数字,而无需提供完整的数字。与其他谓词一起,这在减少返回的数据量方面变得非常强大。

例如 f=>f.Id.ToString().Contains("202")<br/>

这目前失败,因为“ToString()”无法转换为实体存储命令。

或作为 T-SQL 等价物

cast(Id as varchar(9)) LIKE '%202%'

版本:
EF5
.Net 4.0
SQL Server 2008 Standard 或 SQL Compact

4

2 回答 2

1

您可以使用SqlFunctions.StringConvert

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

没有重载,int因此您必须将其转换doubledecimal

于 2012-11-27T09:02:03.563 回答
1

首先你可以尝试使用这个函数: SqlFunctions.StringConvert

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

int 没有重载,因此您必须将类型转换为加倍。该函数被翻译成数据库中的相应函数。

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

objectContext.ExecuteSqlCommand("storedProcedureName", SqlParameters)

或者

objectContext.ExecuteStoreQuery<ResultType>("storedProcedureName", SqlParameters)
于 2012-11-27T09:11:31.313 回答