2016-09-26 15 views
0

私のDBにはこのフィールドがあります:mySerial Double?
私はMulticritera Searchを持っており、このフィールドを検索する必要があります。
ユーザーは、このフィールドを検索して、開始、終了、または必要なものを入力します。Linq Double contains

だから私はこれをしなかった:

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

私が検索: "88890"
は、私が持っている必要があります:888900、888901、888903、結果として888908、888909。
しかし、私は取得のみ :888889

は、LINQのは.ToString().Contains私にを回す:

WHERE CONVERT(NVARCHAR(30), [t0].[mySerial], 2) LIKE '%88890%' 

しかし、私が欲しいのです:

WHERE [mySerial] LIKE '%88890%' 

はのLINQでこれを達成または実行する方法はあります私は012archをvarcharに私の視点でキャストする必要がありますか?

+1

私は驚くことではありません。私はいつも、私のように.ToString()を使って地獄に特別な場所があると思った。intまたはdoubleにContains()を含める。 –

+1

クエリを実行してCONVERT(NVARCHAR(30)、[mySerial]、2)を選択すると、どのような結果が得られますか?ドキュメントによると、2のスタイルは科学的な表記法を提供するので、それがあなたを台無しにするかもしれないかと思います。 'SELECT CONVERT(NVARCHAR(30)、CAST(888889 AS FLOAT)、2)'を試したところ、結果は8.888890000000000e + 005でした。だから、最初に 'int'にキャストしようとしますか? – juharr

+0

これがうまくいくかどうかは不明ですが、 '((string)x.mySerial).Contains(TextBox_mySerial.Text)'を試してみたらどうなりますか? – juharr

答えて

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という値を格納することを検討してください。

+0

問題の手の込んだ –

0

あなたは文字列に変換したいのダブルを持っている場合は、このあたりのようにあなたは、一部文字列表現を選択する必要があります:あなたは

、必ず16桁の数字を得ようとしている https://msdn.microsoft.com/en-GB/library/ms187928.aspx。常に科学記法で使用してください。


ソリューションは、お好みのフォーマットを提供することです。 と思われます。あなたのフィールドは実際にはintですか? (つまり、与えられたすべての例は整数です)、x.mySerial.ToString( "0")は必要なものを提供します。

関連する問題