2014-05-20 1 views
0

스택 오버플로를 검색했지만 최대 ID에 대한 예제 만 찾았습니다. 특정 조건에 대한 최대 ID를 찾고 싶습니다. 이 같은 것을LINQ, "where"조건으로 최대 ID를 얻는 방법

var nRow = from p in ctx.FormControls 
.   where p.FormObjectsId == FormID 
.   select Max(p.Id); 

어떻게 할 수 있습니까?

답변

4

당신은 그렇게 할 수있는 곳의 경우에도 최대 :

var max = ctx.FormControls.Where(r => r.FormObjectsID == FormID) 
          .Max(r => r.Id); 

하여 쿼리 식으로 당신이 할 수 있습니다 :

var nRow = (from p in ctx.FormControls 
      where p.FormObjectsId == FormID 
      select p.Id).Max(); 
1
something.Where(t => t.something> 0).Max(w => w.other);  

또는

0

그냥 순서를 ID 내림차순으로, 자연히 당신에게 최대 ID를줍니다.

var nRow = (from p in ctx.FormControls 
      where p.FormObjectsId == FormID 
      select p.ID).OrderByDescending(x => x.p.ID); 
0

쿼리 구문 : 당신이 정말로 쿼리 표현처럼, 사용 후 Max 확장 메서드를 "필터 및 프로젝션"을 표현하고 할 수 있는지 잘

var nRow = (from p in ctx.FormControls where p.FormObjectsId == FormID select p.Id).Max(); 
2

:

var query = from p in ctx.FormControls 
      where p.FormObjectsId == FormID 
      select p.ID; 
var maxID = query.Max(); 

당신 원하는 경우 중간 변수없이이 작업을 수행 할 수 있지만 대괄호 등을 넣어야 할 때 쿼리식이 추악 해집니다.

저는 개인적으로 프로젝션 인라인을 지정할 수있는 Max의 오버로드를 사용합니다 ... 그 시점에서 쿼리 식을 사용하면 아무런 이점이 없습니다. 확장 메서드와 람다 식을 모두 사용하십시오.

var maxID = ctx.FormControls 
       .Where(p => p.FormObjectsId == FormID) 
       .Max(p => p.ID); 

이 모든 (즉시 실행을 사용하는)을 Max 호출 할 때까지 지연된 실행을 사용하는 것을 잊지 마세요 - 그래서 예를 들어,이 경우 SQL 또는 엔티티 프레임 워크, 전체 쿼리에 LINQ에 대해 실행 SQL로 변환됩니다.