Bagaimana saya melakukan ini
Select top 10 Foo from MyTable
dalam Linq ke SQL?
Bagaimana saya melakukan ini
Select top 10 Foo from MyTable
dalam Linq ke SQL?
Jawaban:
Dalam VB:
from m in MyTable
take 10
select m.Foo
Ini mengasumsikan bahwa MyTable mengimplementasikan IQueryable. Anda mungkin harus mengaksesnya melalui DataContext atau penyedia lain.
Itu juga mengasumsikan bahwa Foo adalah kolom di MyTable yang dipetakan ke nama properti.
Lihat http://blogs.msdn.com/vbteam/archive/2008/01/08/mengonversi-sql-to-linq-part-7-union-top-subqueries-bill-horst.aspx untuk detail lebih lanjut.
Gunakan metode Ambil :
var foo = (from t in MyTable
select t.Foo).Take(10);
Dalam VB, LINQ memiliki ekspresi take:
Dim foo = From t in MyTable _
Take 10 _
Select t.Foo
Dari dokumentasi:
Take<TSource>
menghitungsource
dan menghasilkan elemen sampaicount
elemen telah dihasilkan atausource
tidak mengandung elemen lagi. Jikacount
melebihi jumlah elemen dalamsource
, semua elemensource
dikembalikan.
OP sebenarnya menyebutkan offset juga, jadi untuk ex. jika Anda ingin mendapatkan item dari 30 hingga 60, Anda akan melakukan:
var foo = (From t In MyTable
Select t.Foo).Skip(30).Take(30);
Gunakan metode "Lewati" untuk offset.
Gunakan metode "Ambil" untuk batas.
@ Janei: komentar pertama saya di sini adalah tentang sampel Anda;)
Saya pikir jika Anda suka ini, Anda ingin mengambil 4, kemudian menerapkan jenis pada 4 ini.
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
};
Berbeda dengan memilah seluruh tbl_News oleh idNews turun lalu mengambil 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);
tidak ? hasilnya mungkin berbeda.
Saya suka ini:
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
};
Apakah take terjadi pada klien atau dalam db tergantung di mana Anda menerapkan operator take. Jika Anda menerapkannya sebelum Anda menghitung kueri (yaitu sebelum Anda menggunakannya dalam foreach atau mengubahnya menjadi koleksi), pengambilan akan menghasilkan "SQL top" operator SQL yang dikirim ke db. Anda dapat melihat ini jika Anda menjalankan SQL profiler. Jika Anda menerapkan pengambilan setelah menghitung kueri itu akan terjadi pada klien, karena LINQ harus mengambil data dari database agar Anda menghitungnya.
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();
Saya harus menggunakan metode Take (n), lalu bertransformasi menjadi daftar, Berfungsi seperti pesona:
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();
Cara ini berhasil bagi saya:
var noticias = from n in db.Noticias.Take(6)
where n.Atv == 1
orderby n.DatHorLan descending
select n;
Untuk limit 1
menggunakan metode FirstOrDefault()
atau First()
.
Contoh
var y = (from x in q select x).FirstOrDefault();