2010-08-05 4 views
1

주로 숫자 값을 포함하는 nvarchar SQL 열이 있습니다. 숫자가 아닌 값을 무시하면서 최대 수치를 얻는 L2S 표현식을 찾으려고합니다. 작업을 수행텍스트 열에서 최대 숫자 값을 가져 오는 Linq-SQL 식

는 SQL은 다음과 같습니다

select top 1 value from identifier where and patindex('%[^0-9]%', value) = 0 order by CAST(value AS INT) desc 

무엇 LINQ 표현 내가 같은 일을 달성하기 위해 사용할 수 있습니까?

답변

5

System.Data.Linq.SqlClientSqlMethods을 사용하여 SQL Like 쿼리를 수행 할 수 있습니다.

(from a in identifier 
where !SqlMethods.Like(a.value, "%[^0-9]%") 
select a).Max(x => Convert.ToInt64(x.value)) 

이 Linq에 문 LinqPad에 따라이 쿼리가된다 :

-- Region Parameters 
DECLARE @p0 VarChar(8) = '%[^0-9]%' 
-- EndRegion 
SELECT MAX([t1].[value]) AS [value] 
FROM (
    SELECT CONVERT(BigInt,[t0].[value]) AS [value], [t0].[value] 
    FROM [Identifier] AS [t0] 
    ) AS [t1] 
WHERE NOT ([t1].[value] LIKE @p0) 

LinqPad 당신은 당신이 찾고있는 것을 얻을 수 있는지 확인하기 위해 쿼리를 함께 놀러 수있는 좋은 방법입니다. 좋은 L2S가없는 유일한 SQL 문은 PIVOT 키워드를 가진 SQL 문과 같습니다. 그 외에는 일반적으로 원하는 것을 얻을 수있는 방법이 있습니다.

은 전체 기록 만이 아니라 MAX() 값을 원하는 경우에, 당신은 쿼리 이런 식으로 할 수있는 : 중첩 된 선택은 비를 제외하지 않고 변환을하고 있기 때문에

(from a in Accounts 
orderby (!SqlMethods.Like(a.AccountNumber, "%[^0-9]%") ? 
         Convert.ToInt64(a.AccountNumber) : 0) 
descending 
select a).Take(1) 
+0

쿼리가 비록 실패를 숫자 값. – sipwiz

+0

죄송합니다. 나는 Like 인수를 전환했다. 내가 그것을 업데이트하고 더미 데이터 및 첫 번째 쿼리를 실행 (SQL 2008)에 대해 그것을 테스트했습니다. – mattmc3

+0

난 그저 잘 했어 :). 그러면 쿼리 분석기에서 SQL을 더 자세히 볼 수 있습니다. – sipwiz

관련 문제