상위 5 개를 선택하는 LINQ 쿼리

LINQ 쿼리가 있습니다.

var list = from t in ctn.Items
           where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
           orderby t.Delivery.SubmissionDate
           select t;

이 쿼리를 수정하여 데이터베이스에서 5 개의 결과 만 선택하려면 어떻게해야합니까?



답변

var list = (from t in ctn.Items
           where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
           orderby t.Delivery.SubmissionDate
           select t).Take(5);

답변

해결책:

var list = (from t in ctn.Items
           where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
           orderby t.Delivery.SubmissionDate
           select t).Take(5);

답변

Linq의 Lambda 기반 접근 방식을 사용하여이 작업을 수행 할 수도 있습니다.

var list = ctn.Items
.Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null)
.OrderBy(t => t.Delivery.SubmissionDate)
.Take(5);

답변

[ @Ajni가 제공 한 답변보다 다소 설명적인 답변을 제공합니다 .]

LINQ 유창한 구문을 사용하여 얻을 수도 있습니다 .

var list = ctn.Items
    .Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null)
    .OrderBy(t => t.Delivery.SubmissionDate)
    .Take(5);

참고 각 방법 (즉 Where, OrderBy, Take)이 LINQ 문에 표시가 걸리는 람다 식 인수로한다. 또한 설명서는 다음으로 Enumerable.Take시작합니다.

시퀀스의 시작 부분에서 지정된 수의 연속 요소를 반환합니다.


답변

Additional information

때로는 모델을 뷰 모델에 바인딩하고 유형 변환 오류를 제공해야 합니다 . 이 상황에서는 ToList()방법 을 사용해야합니다 .

var list = (from t in ctn.Items
       where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
       orderby t.Delivery.SubmissionDate
       select t).Take(5).ToList();

답변

SQL 스크립트에서와 같이 From-> Where-> Select 시퀀스에 익숙하지 않다고 생각하면 Select-> From-> Where 와 같습니다 .

그러나 Sql Engine 내에서 ‘ From-> Where-> Select ‘ 의 순서로 구문 분석된다는 것을 알지 못할 수도 있습니다. 유효성을 확인하려면 간단한 스크립트를 사용해보십시오.

select id as i from table where i=3

작동하지 않습니다. 이유는 엔진이 Where before Select 를 구문 분석 하므로 where 에서 별칭 i를 알 수 없기 때문입니다 . 이 작업을 수행하려면 시도해 볼 수 있습니다

select * from (select id as i from table) as t where i = 3