web-dev-qa-db-ja.com

TOPまたはLIMIT / OFFSETに相当するLinq to SQLとは何ですか?

どうすればいいですか

Select top 10 Foo from MyTable

linq to SQLで?

189
Herb Caudill

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 を参照してください=詳細については。

143
David Alpert

Take method を使用します。

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

VBでは、LINQにはtake式があります。

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

ドキュメントから:

Take<TSource>sourceを列挙し、count要素が生成されるか、sourceに要素がなくなるまで要素を生成します。 countsourceの要素数を超える場合、sourceのすべての要素が返されます。

246
Adam Lassek

Take(int n)メソッドを使用します。

var q = query.Take(10);
33
amcoder

OPは実際にオフセットについても言及しているので、たとえば30から60のアイテムを取得する場合は、次のようにします。

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

オフセットには「スキップ」メソッドを使用します。
制限には「テイク」メソッドを使用します。

18
Inc33

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

いや?結果が異なる場合があります。

13
Yann

これはC#でうまく機能します

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

私はこれが好きです:

 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
                };
4
Janei Vieira

テイクがクライアントで行われるか、データベースで行われるかは、テイク演算子を適用する場所によって異なります。クエリを列挙する前に(つまり、foreachで使用する前に、またはコレクションに変換する前に)適用すると、テイクにより、dbに「上位n」のSQL演算子が送信されます。 SQLプロファイラーを実行すると、これを確認できます。クエリを列挙した後にテイクを適用すると、LINQがデータベースからデータを取得して列挙するため、クエリが列挙されます。

3
user124368

Take(N)メソッドを使用します。

3
FlySwat
Array oList = ((from m in dc.Reviews
                           join n in dc.Users on m.authorID equals n.userID
                           orderby m.createdDate descending
                           where m.foodID == _id                      
                           select new
                           {
                               authorID = m.authorID,
                               createdDate = m.createdDate,
                               review = m.review1,
                               author = n.username,
                               profileImgUrl = n.profileImgUrl
                           }).Take(2)).ToArray();
2
minhnguyen

ソートせずにデータベースのデータを取得することは、ランダム取得と同じです。

1
Anton

このようにそれは私のために働いた:

var noticias = from n in db.Noticias.Take(6)
                       where n.Atv == 1
                       orderby n.DatHorLan descending
                       select n;
0
Gladson

Take(n)メソッドを使用してから、リストに変換する必要がありました。

    var listTest = (from x in table1
                     join y in table2
                     on x.field1 equals y.field1
                     orderby x.id descending
                     select new tempList()
                     {
                         field1 = y.field1,
                         active = x.active
                     }).Take(10).ToList();
0
Apollo SOFTWARE

limit 1には、メソッドFirstOrDefault()またはFirst()を使用します。

var y = (from x in q select x).FirstOrDefault();

0
display_name