2009-05-08 4 views
1

나는 테이블이 있고 ID를 기반으로 레코드를 선택해야합니다. 날짜 필드에 최대 (날짜)가있는 레코드 만 반환하려고합니다. 어떻게해야합니까?Linq하려면 SQL vb.net 지원

는 SQL 서버에서 나는 내가 Linq에이 작업을 수행 할 수 있습니다 방법이

SELECT * FROM dch 
WHERE EffectiveDate = (SELECT MAX(EffectiveDate) FROM dch 
WHERE ID = 99) AND ID = 99 

사용합니다. 불행히도이 앱은 VB.NET에서 코딩되어 있습니다.

나는이

Dim qry = (From dch In db.dch _ 
        Where dch.Dealer.Equals(Dealer) _ 
        Select dch.EffectiveDate).Max() 

또는

Dim qry = (From dch In db.dch _ 
        Where dch.Dealer.Equals(Dealer) _ 
        Select).Max(dch.EffectiveDate) 

을 시도하고 있었다 그리고 분명히 그들은 작동하지 않습니다. 내가 가까이 있니? 어떤 아이디어라도 감사 할 것입니다.

감사의 말 전진.

답변

2

저는 VB 구문에서 오류를 용서하십시오. (대부분) C# 프로그래머입니다.

Dim item = db.dch.Where(Func(d) d.ID == 99) _ 
       .OrderByDescending(Func(d) d.EffectiveDate)_ 
       .Take(1) 

그것은 실제로 내가 쿼리에 해당 생각

select top 1 <...columns...> 
from dch 
where ID == 99 
order by EffectiveDate desc 

로 구현 될 것이다.

+0

이것은 나에게 그렇게하는 것처럼 보입니다. 비효율적으로 보일지라도 실제로 결과를 반복하려고 시도 할 때까지는 쿼리가 실행되지 않는다는 것을 기억하십시오. –

+0

달콤한 !!! 내 필요에 완벽하게 작동합니다. 나는 팁을 바르게 평가한다!! ~ ck –

0

질문에 구체적으로 답변하지 않았습니다. 이것은 더 많은 사람이 물고기를 입력 시나리오를 가르쳐 ...하지만 Linq 배우고,이 사이트를 북마크하고 자주 방문하십시오. 101 Linq VB Samples

Your specific answer is here under Max about halfway down.

그 사이트는 향후 새로운 LINQ 질문의 80 %를 해결할 것입니다.

기록에 따르면, 귀하의 설명에 따르면 나는 이것이 당신이 원하는 것이라고 생각합니다. 오직 최고 효과적인 날짜를 반환합니다 부여

dim results = (from d in db.dch where d.ID == 99 select d.EffectiveDate).Max()

. 두 번째 쿼리에서

0

, 당신은 최대 확장 메서드에 인수로 람다 식을 통과해야 :

Dim qry = (From dch In db.dch _ 
      Where dch.Dealer.Equals(Dealer) _ 
     ).Max(Function (item) item.EffectiveDate) 

편집 : 나는 정말 대답을하지 않는 것을 깨닫게 질문에 두 번째 살펴보면 실제 결과를 얻으려면 두 번째 쿼리를 수행해야하기 때문입니다. 또한 첫 번째 쿼리는 내 쿼리와 동일한 작업을 수행해야합니다 (최대 EffectiveDate 값 가져 오기).