[linq-to-sql] Linq to SQL은 TOP 또는 LIMIT / OFFSET에 해당합니까?

어떻게해야합니까

Select top 10 Foo from MyTable

Linq에서 SQL로?



답변

VB에서 :

from m in MyTable
take 10
select m.Foo

이것은 MyTable이 IQueryable을 구현한다고 가정합니다. DataContext 또는 다른 공급자를 통해 액세스해야 할 수도 있습니다.

또한 Foo는 MyTable에서 속성 이름에 매핑되는 열이라고 가정합니다.

자세한 내용은 http://blogs.msdn.com/vbteam/archive/2008/01/08/converting-sql-to-linq-part-7-union-top-subqueries-bill-horst.aspx 를 참조하십시오 .


답변

Take 방법을 사용하십시오 .

var foo = (from t in MyTable
           select t.Foo).Take(10);

VB에서 LINQ는 다음과 같은 표현을 가지고 있습니다.

Dim foo = From t in MyTable _
          Take 10 _
          Select t.Foo

설명서에서 :

Take<TSource>요소가 산출되거나 더 이상 요소를 포함하지 않을 source때까지 count요소를 열거 하고 산출 source합니다. 경우 count의 요소 수를 초과하는 source모든 요소의 source반환됩니다.


답변

Take(int n)방법을 사용하십시오 :

var q = query.Take(10);


답변

OP는 실제로 예를 들어 오프셋을 언급했습니다. 30에서 60 사이의 항목을 가져 오려면 다음을 수행하십시오.

var foo = (From t In MyTable
       Select t.Foo).Skip(30).Take(30);

오프셋에는 “건너 뛰기”방법을 사용하십시오.
“Take”방법을 사용하여 제한하십시오.


답변

@Janei : 내 첫 번째 의견은 샘플에 관한 것입니다.)

나는 당신이 이것을 좋아한다면, 당신은 4를 취하고 4에 정렬을하고 싶다고 생각합니다.

var dados =  from d in dc.tbl_News.Take(4)
                orderby d.idNews descending
                select new
                {
                    d.idNews,
                    d.titleNews,
                    d.textNews,
                    d.dateNews,
                    d.imgNewsThumb
                };

idNews를 기준으로 전체 tbl_News를 정렬하고 4를 내림

var dados =  (from d in dc.tbl_News
                orderby d.idNews descending
                select new
                {
                    d.idNews,
                    d.titleNews,
                    d.textNews,
                    d.dateNews,
                    d.imgNewsThumb
                }).Take(4);

아니 ? 결과가 다를 수 있습니다.


답변

이것은 C #에서 잘 작동합니다.

var q = from m in MyTable.Take(10)
        select m.Foo


답변

나는 이것을 좋아한다 :

 var dados =  from d in dc.tbl_News.Take(4)
                orderby d.idNews descending

                select new
                {
                    d.idNews,
                    d.titleNews,
                    d.textNews,
                    d.dateNews,
                    d.imgNewsThumb
                };