Linq Double包含

时间:2016-09-26 11:40:12

标签: c# linq

在我的数据库中,我有这个字段:results.Where(x => x.mySerial.ToString().Contains(TextBox_mySerial.Text)) ;
我有一个Multicritera搜索,我必须搜索这个字段 用户想要在此字段中搜索键入开头,结尾或他们想要的任何内容。

所以我这样做了:

.ToString().Contains

当我搜索:“88890”
我应该:888900,888901,888903,888908,888909。
但 我只得到:888889

Linq将WHERE CONVERT(NVARCHAR(30), [t0].[mySerial], 2) LIKE '%88890%' 转入:

WHERE [mySerial] LIKE '%88890%'

但我想要的是:

[mySerial]

有没有办法在Linq中实现这一点,还是我必须在我的视图中将<h2>Basic Usage</h2> <input type='text' class="basic"/> $(".basic").spectrum({ color: "#f00", showInput:true, preferredFormat:'hex', change: function(color) { $("#basic-log").text("change called: " + color.toHexString()); } }); http://jsfiddle.net/ctkY3/5227/ 转换为varchar?

2 个答案:

答案 0 :(得分:3)

问题在于Linq使用2的样式进行转换,从而产生科学记数法。所以以下查询

SELECT CONVERT(NVARCHAR(30), CAST(888900  AS FLOAT), 2)
UNION
SELECT CONVERT(NVARCHAR(30), CAST(888901  AS FLOAT), 2)
UNION
SELECT CONVERT(NVARCHAR(30), CAST(888903  AS FLOAT), 2)
UNION
SELECT CONVERT(NVARCHAR(30), CAST(888909   AS FLOAT), 2)
UNION
SELECT CONVERT(NVARCHAR(30), CAST(888889 AS FLOAT), 2)

给出这些结果

  

8.888890000000000e + 005

     

8.889000000000000e + 005

     

8.889010000000000e + 005

     

8.889030000000000e + 005

     

8.889090000000000e + 005

所以你要么首先投射到int

results.Where(x => ((int)x.mySerial).ToString().Contains(TextBox_mySerial.Text)) ;

或者输入类似“8.8890”的内容。实际上,两者都不是一个非常好的选项,因此如果您需要对其进行字符串操作而不是数字操作,您可能需要考虑将值存储为NVarChar

答案 1 :(得分:0)

如果您有想要转换为字符串的双精度,那么您必须选择某些字符串表示形式,如下所示: https://msdn.microsoft.com/en-GB/library/ms187928.aspx你会得到

  

总是16位数。始终使用科学记数法。

解决方案是提供您的首选格式。 似乎你的字段实际上是一个int吗? (即你给出的所有例子都是整数)所以x.mySerial.ToString(&#34; 0&#34;)应该提供你想要的东西。