2010-06-14 4 views
3

기본적으로 내가 잘못 설계 한 코드가 많아서 훨씬 더 우아하게 할 수 있습니다.LINQ 쿼리의 최상위 항목을 가져 오는 것

내가하려는 것은 데이터베이스 테이블에서 마지막 날짜를 가져 오는 것입니다.

var Result = 
from a in DB.Table 
orderby a.Date descending 
select new {Date = a}; 

foreach(var Row in Result) 
{ 
LastDate = Row.Date.Date; 
break; 
} 

기본적으로 한 번만 실행되도록 설계된 foreach 루프가 있습니다. 진심으로! 같은 것을 달성하기위한 "모범 사례"방법은 무엇입니까?

답변

13
var first = Result.First(); 

결과 집합이 비어 있으면 예외가 throw됩니다. 결과 집합이 비어 있으면 null을 반환하는 FirstOrDefault()를 사용할 수 있습니다.

8

First()으로 전화하십시오. 예를 들어
: 테이블이 비어있을 경우

LastDate = 
    (from a in DB.Table 
    orderby a.Date descending 
    select a.Date 
    ).First(); 

, 예외를 던지는 대신 DateTime.MinValue를 반환하는, FirstOrDefault()를 호출합니다.

3
var LastDate = DB.Table.OrderBy(a => a.Date).FirstOrDefault(); 
1

FirstOrDefault()와 보너스로, 당신은 당신이 그것을 짐작 ...에 대한 LastOrDefault()를 사용할 수 있습니다 ...

[편집] - 오, 같은과가 갑자기 돌진 대답 : 당신은 또한 Take(1)First()의 차이는 먼저 하나의 객체를 반환한다는 것입니다 Result.Take(1) 를 호출 유형의 반환에게 IEnumerable을 걸릴 수

0

.

+0

그는 원하지 않는' IEnumerable'입니다. – SLaks

0

날짜가 참조 유형이면 병합 연산자를 고려할 수 있습니다.

var LastDate = Result.FirstOrDefault() ?? 새 날짜(); 최신 날짜를 찾기 위해 노력하는 경우

+0

'.Cast ' – SLaks

0

, 당신은 (내가 linq2sql는 SQL MAX 작업을 변환 것으로 예상)은 "최대"기능을 사용할 수 있습니다

var maxdate = DB.Table.Max(a => a.Date) 
관련 문제