Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq双包含_C#_Linq - Fatal编程技术网

C# Linq双包含

C# Linq双包含,c#,linq,C#,Linq,在我的数据库中,我有一个字段:mySerial Double? 我有一个多准则搜索,我必须搜索这个字段。 用户希望在此字段上搜索,键入开始、结束或他们想要的任何内容 所以我这样做了: results.Where(x=>x.mySerial.ToString().Contains(TextBox\u mySerial.Text)); 当我搜索时:“88890” 我应该有:888900,888901,888903,888908,888909作为结果 但是 我只得到:88889 Linq turn.

在我的数据库中,我有一个字段:
mySerial Double?

我有一个多准则搜索,我必须搜索这个字段。
用户希望在此字段上搜索,键入开始、结束或他们想要的任何内容

所以我这样做了:

results.Where(x=>x.mySerial.ToString().Contains(TextBox\u mySerial.Text));
当我搜索时:“88890”
我应该有:888900,888901,888903,888908,888909作为结果
但是 我只得到:88889

Linq turn
.ToString()。包含将
my转换为:

其中CONVERT(NVARCHAR(30),[t0].[mySerial],2)类似于“%88890%”
但我想要的是:

WHERE[mySerial]像“%88890%”

有没有办法在Linq中实现这一点,或者我必须将视图中的
[mySerial]
转换为varchar

如果有一个double要转换为字符串,则必须选择一些字符串表示形式,如下所示: 你会得到

始终为16位数字。总是在科学记数法中使用



解决方案是提供您首选的格式。你的字段实际上是整数吗?(即您给出的所有示例都是整数)因此x.mySerial.ToString(“0”)应该提供您想要的内容。

如果您有一个要转换为字符串的double,则必须选择一些字符串表示形式,如下所示: 你会得到

始终为16位数字。总是在科学记数法中使用



解决方案是提供您首选的格式。你的字段实际上是整数吗?(即您给出的所有示例都是整数)因此x.mySerial.ToString(“0”)应该提供您想要的内容。

问题在于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.88889000000000E+005

8.88900000000000E+005

8.88901000000000E+005

8.8890300000000000E+005

8.88909000000000E+005

因此,您需要先将其转换为
int

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

或者输入类似“8.8890”的内容。事实上,没有一个是很好的选择,所以您可能需要考虑将值存储为<代码> NVARCHAR< <代码>,而不是需要对其进行字符串操作而不是数值操作。

< P>问题是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.88889000000000E+005

8.88900000000000E+005

8.88901000000000E+005

8.8890300000000000E+005

8.88909000000000E+005

因此,您需要先将其转换为
int

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

或者输入类似“8.8890”的内容。事实上,没有一个是很好的选择,所以您可能需要考虑将值存储为<代码> NVARCHAR< <代码>,如果您需要对其进行字符串操作而不是数字操作。

我并不感到意外。我一直认为像我这样的ppl在地狱里有一个特殊的位置。ToString()。Contains()在int或double上。如果你运行一个查询并选择
CONVERT(NVARCHAR(30),[mySerial],2)
你会得到什么结果?根据文档,2的样式会给出科学的符号,所以我想知道这是否会把你搞砸。刚刚尝试了
选择CONVERT(NVARCHAR(30),CAST(88889作为FLOAT),2)
,结果是8.88889000000000e+005。因此,也许可以先尝试强制转换为
int
?不确定这是否有效,但如果尝试
((string)x.mySerial).Contains(TextBox_mySerial.Text)
,则会发生什么情况?最好使用介于两者之间的方式,而不是像这样。将文本框值转换为双精度值。使用字符串时,可能会出现舍入问题,因为8.88900是双精度的,可能会以8.88899作为文本结束。@juharr不能执行
((string)x.mySerial)。
不可能以这种方式转换可为空的双精度。我一点也不奇怪。我一直认为像我这样的ppl在地狱里有一个特殊的位置。ToString()。Contains()在int或double上。如果你运行一个查询并选择
CONVERT(NVARCHAR(30),[mySerial],2)
你会得到什么结果?根据文档,2的样式会给出科学的符号,所以我想知道这是否会把你搞砸。刚刚尝试了
选择CONVERT(NVARCHAR(30),CAST(88889作为FLOAT),2)
,结果是8.88889000000000e+005。因此,也许可以先尝试强制转换为
int
?不确定这是否有效,但如果尝试
((string)x.mySerial).Contains(TextBox_mySerial.Text)
,则会发生什么情况?最好使用介于两者之间的方式,而不是像这样。将文本框值转换为双精度值。使用字符串可能会导致舍入问题,因为8.88900作为双精度可能最终成为8.88899作为文本。@juharr不能执行
((string)x.mySerial)。
不可能通过问题的精化@handlice问题的精化@hand来铸造可为空的双精度