2012-02-10 5 views
1

안녕하세요 저는 SQL 아래에서 LINQ 쿼리로 변환하는 중이다. 내가 원하는 모든 목록에서 최대 수 (FA-00001, FA-00059)SQL을 LINQ 쿼리로 변환하여 최대 값을 얻으십시오.

SELECT MAX(CAST(SUBSTRING(ReferenceId, PATINDEX('%-%', ReferenceId) + 1, LEN(ReferenceId) - PATINDEX('%-%', ReferenceId)) AS int)) AS MaxReferenceId FROM [ClientRC].[dbo].[EHO_Action] 

이 LINQ로 변환 할 수있는이다? 덕분에

답변

0

다른 방법을 익명 프로젝션 사용 :

var y = (from record in 
       (from record in db.ClientRC 
       select new 
       { 
        Group = "x", 
        ReferenceNumber = Convert.ToInt32(record.ReferenceId.Split('-')[1]) 
       }) 
      group record by new { record.Group } into g 
      select new 
      { 
       MaxReferenceId = g.Max(p => p.ReferenceNumber) 
      }); 
+0

whoaaa 높은 수준이지만 좋은 성능 현명한 아닌가요? 나는 내부 쿼리를 볼 수 있습니다 ... :) –

+0

이것은 아마도 경우입니다 - 나는 테스트하지 않았습니다. 난 단지 당신에게 비교할 수있는 수준의 예제를 제공하고 싶었습니다. – Nick

+0

그런데 고맙습니다 ... 저는이 LINQ 세계에서 새롭기 때문에 더 많이 알게되어 기쁩니다. –

0

http://msdn.microsoft.com/en-us/library/bb386972.aspx

var myvar = (from v in db.object where v!=null select v.id).Max(); 

MSDN 이런 것들에 대한 예는 많이있다.

또는 엔티티 프레임 워크를 사용하는 경우 datacontext에 대해 직접 쿼리를 실행할 수 있습니다. 쿼리를 매개 변수화하고 사용자 입력을 직접 매개 변수에 전달하지 않는 매개 변수를 사용하여 작업을 수행하고 있는지 확인하십시오. http://msdn.microsoft.com/en-us/library/ee358769.aspx

+0

내 열은 문자열과 내가하지 정수가 필요됩니다 FA001 또는 EHO-를 00001에서 삭감하고 max ...를 확인하고 예를 들면 59만을 반환합니다. 제 설명이 의미가 있습니까? 고마워요 –

+0

EF를 사용하고 있습니까? 그렇다면 위와 같은 쿼리를 데이터 컨텍스트와 직접 실행할 수 있습니다. 내 대답을 편집했는데 내 뜻을 나타내는 두 번째 링크가 있습니다. –

+0

아니요, 저는 codesmith 만 사용하고 있습니다. –

0

이 시도 ..

var list = DBContext.EHO_Action 
        .Where(x => x.YourListColumn != null) 
        .Select(x => x.YourListColumn).ToList(); // Take the list (FA-00001 ,FA-00059) from db to a list 

var maxNo = list.Max(x => Convert.ToInt32(x.Split('-')[1])); 

당신의 LINQ 상황에 따라 상황 및 열 이름을 변경하십시오. 당신은 SQL을 사용하려면

당신은이 방법을 수행 할 수 있습니다 ..

var list = DBContext.ExecuteQuery<string>("select yourreqrdcolumn from [ClientRC].[dbo].[EHO_Action]"); 
+0

나는 방금 같은 해결책을 생각했지만 그것이 최적화되지 않을 것이라고 생각했는데 SQL에서 직접 최대 값을 취하는 것이 더 좋지 않을까? –

+0

네, SQL에서 직접 int 또는 유사한 데이터 유형으로 직접 작업하는 경우에만 좋은 생각입니다. 그러나 linq-tosql을 사용하여 문자열을 변환하거나 구문 분석하는 것과 같이 직접 문자열 조작을 원할 경우 형식 변환 오류가 발생합니다. 그래서, 나는 그것을리스트에 가져 왔고 그것에 닷넷 문자열 조작을 사용했습니다. 그것은 완전히 당신의 취향입니다. – Flowerking

+0

감사합니다 그것은 작동하지만 열이 null 인 경우 어떤 예외를 제공합니까? 및 paramter를 보내지 않고이 동일한 SQL 쿼리를 DBContext.Executequery에서 실행하여 스칼라 값을 얻으려면 어떻게해야합니까? –

관련 문제