System.Data.Objects.SqlClient.SqlFunctions.StringConvert()注意事项

当出现

LINQ to Entities 不识别方法"System.String ToString()",因此该方法无法转换为存储表达式.

错误时,我们会想到用System.Data.Objects.SqlClient.SqlFunctions.StringConvert()这个类对相关字段进行转换。

但是,转换完成后,得到的查询结果可能会没有数据。

导致这个问题的原因是由于上面的StringConvert()函数在转换为SQL时,是转换为 STR函数的,这一点我们可以通过LINQ中的ToTraceString()方法,

对生成的SQL语句进行查看。

因为STR方法在生成字符串的时候,它是有可能会补空格的,也有可能会得到**的结果,具体如下参考:

语法

 
STR ( float_expression [ , length [ , decimal ] ] )

参数

float_expression

带小数点的近似数字 (float) 数据类型的表达式。

length

总长度。它包括小数点、符号、数字以及空格。默认值为 10。

decimal

小数点后的位数。decimal 必须小于或等于 16。如果 decimal 大于 16,则会截断结果,使其保持为小数点后具有十六位。

返回类型

char

备注

如果为 STR 提供 lengthdecimal 参数值,则这些值应该是正数。在默认情况下或小数参数为 0 时,数字舍入为整数。指定的长度应大于或等于小数点前面的部分加上数字符号(如果有)的长度。短的 float_expression 在指定长度内右对齐,长的 float_expression 则截断为指定的小数位数。例如,STR(12,10) 输出的结果是 12。它在结果集内右对齐。而 STR(1223,2) 则将结果集截断为 **。可以嵌套字符串函数。

注意:
若要转换为 Unicode 数据,请在 CONVERT 或 CAST 转换函数内使用 STR。

 

综上所述:

如果我们有如下的LINQ 语句

a,b两个表中的关键字ID的值有关联,但是类型不同

var result=a.Join(b,l=>System.Data.Objects.SqlClient.SqlFunctions.StringConvert((double)l.ID),r=>r.ID,....);

最好写成如下方式:

var result=a.Join(b,l=>System.Data.Objects.SqlClient.SqlFunctions.StringConvert((double)l.ID).Trim(),r=>r.ID,....);

这样可以避免因为引入空格,而导致连接失败。

 

另外,需要注意的是STR默认的length是10,所以在要转换的数据超过10的时System.Data.Objects.SqlClient.SqlFunctions.StringConvert的处理方式

也需要测试。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值