2016-09-26 3 views
0

내 DB에이 필드가 있습니다. mySerial Double?
멀티 멀웨어 검색이 있으며이 필드를 검색해야합니다.
사용자가 시작, 종료 또는 원하는 모든 것을 입력하는이 필드를 검색하려고합니다.Linq Double contains

그래서 이런 짓을 :

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

내가 검색 : "88890"
내가해야 : 888900, 888901, 888903, 결과적으로 888,908, 888,909.
그러나 난 단지 얻을 : 888,889

이 Linq에 차례 .ToString().Contains 내 어 :

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

하지만 내가 원하는 것은 :

WHERE [mySerial] LIKE '%88890%' 

는 Linq에이를 달성하거나 할 수있는 방법이 있습니까 내보기에 [mySerial]을 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

그래서 당신은 하나 같이 "8.8890"대신에 뭔가를 int

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

캐스트 또는 입력해야합니다. 실제로 어느 것도 매우 좋은 옵션이 아니므로 숫자 대신 숫자로 문자열 연산을 수행해야하는 경우 값을 NVarChar으로 저장하는 것이 좋습니다.

+0

문제의 정교함 @ 손 –

0

당신은이에 따라, 일부 문자열 표현을 선택해야합니다 : https://msdn.microsoft.com/en-GB/library/ms187928.aspx 당신이

항상 16 개 자리를 얻을 것입니다. 항상 과학 표기법으로 사용하십시오.


이 솔루션은 원하는 형식을 제공하는 것입니다. 필드가 실제로 int입니까? (예 : 모든 예제는 정수입니다.) x.mySerial.ToString ("0")은 원하는 것을 제공해야합니다.