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


234

LINQ 쿼리가 있습니다.

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

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


Take (how_many_you_wish)
snr

답변:


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

5
+1이지만 gah는 여러 줄 표현을 괄호로 묶은 다음 전체를 역 참조하면 실제로 어떤 이유로 든 나를 기쁘게합니다.
닥터 존스

6
이것은 동등 조건과 일치하는만큼 데이터베이스에서 많은 결과를 가져 오는 것으로 보이며, 데이터베이스에서 가져온 후에 만 ​​응용 프로그램 내에서 take (5) 제한을 적용합니다. 말 그대로 take데이터베이스에서 처음 5 행만 할 수있는 방법이 있습니까?
JM Hicks

6
@JMHicks는 실제로는 아닙니다. Take (5) 명령은 IQueryable에 또 다른 조건을 추가하기 때문에 열거 할 때까지 실행되지 않습니다. 그러나 Take 작업을 지원하지 않는 LINQ 공급자가있을 수 있습니다.
브루노 브랜트

1
@JMHicks-linq가 작동하는 방식이 아닙니다 ... linq가 게으 릅니다.
Hogan

39

해결책:

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

19

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

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

8

[ @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시작합니다.

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


5

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();

0

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.