C# 如何做一个;包含/Like";在EF5整数列上vs SQL Server?e、 g.Name.Contains的整数版本(";Fred";)

C# 如何做一个;包含/Like";在EF5整数列上vs SQL Server?e、 g.Name.Contains的整数版本(";Fred";),c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我看了很多关于SO的帖子,得出了很多不同的答案——没有一个看起来很有效,或者根据代码版本相互矛盾等等 我更愿意避开“AsEnumerable()”修复,因为据我所知,这会在应用查询之前计算所有结果……我希望先运行查询,以便结果中的数据尽可能小 信息提示:我查询的表可以包含+200万行 我的要求: 通过实体框架,SQL Server(紧凑型或标准型)的整数列上的“包含”函数。这将允许用户输入一个要搜索的号码,而不需要完整的号码。结合其他谓词,这在减少返回的数据量方面变得非常强大 e、 g。 f=>

我看了很多关于SO的帖子,得出了很多不同的答案——没有一个看起来很有效,或者根据代码版本相互矛盾等等

我更愿意避开“AsEnumerable()”修复,因为据我所知,这会在应用查询之前计算所有结果……我希望先运行查询,以便结果中的数据尽可能小

信息提示:我查询的表可以包含+200万行

我的要求:

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

e、 g。
f=>f.Id.ToString()包含(“202”)

此操作当前失败,因为“ToString()”无法转换为实体存储命令

或者作为T-SQL的等价物

cast(Id为varchar(9))类似于“%202%”

版本:
EF5
.Net 4.0
您可以使用SQL Server 2008标准或SQL Compact


int
没有重载,因此必须将其强制转换为
double
decimal
首先,您可以尝试使用此函数:

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

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

objectContext.ExecuteSqlCommand(“storedProcedureName”,SqlParameters)

objectContext.ExecuteStoreQuery(“storedProcedureName”,SqlParameters)

无法将类型“System.Data.Objects.SqlClient.SqlFunctions”上指定的方法“System.String StringConvert(System.Nullable'1[System.Double])转换为LINQ to Entities存储表达式。@BlueChippy,是否在SQL Compact上尝试该方法?在SQL Server 2008标准中尝试一下。是的,我们在compact上进行了测试。好吧,让我向后看一下……我会认为,删除Linq2SQL for compact后,他们会在同样的方面改进L2E。自我提醒:永远不要相信MS在更换某些东西时会添加功能!进一步信息:我可以从Linq2EF切换到Linq2Sql,但Linq2EF与Oracle一起工作,并支持Int上的“Contains”:(
f=> SqlFunctions.StringConvert((double) f.Id).Contains("202")
f=>SqlFunctions.StringConvert((double)f.id)).Contains("202")
objectContext.ExecuteStoreQuery<ResultType>("storedProcedureName", SqlParameters)