Câu trả lời:
Trong VB:
from m in MyTable
take 10
select m.Foo
Điều này giả định rằng MyTable triển khai IQueryable. Bạn có thể phải truy cập thông qua DataContext hoặc một số nhà cung cấp khác.
Nó cũng giả định rằng Foo là một cột trong MyTable được ánh xạ tới tên thuộc tính.
Xem http://bloss.msdn.com/vbteam/archive/2008/01/08/converting-sql-to-linq-part-7-union-top-subqueries-bill-horst.aspx để biết thêm chi tiết.
Sử dụng phương thức Take :
var foo = (from t in MyTable
select t.Foo).Take(10);
Trong VB LINQ có một biểu thức:
Dim foo = From t in MyTable _
Take 10 _
Select t.Foo
Từ tài liệu:
Take<TSource>
liệt kêsource
và sản lượng các phần tử cho đến khicount
các phần tử đã được mang lại hoặcsource
không chứa các phần tử nữa. Nếucount
vượt quá số lượng phần tử trongsource
, tất cả các phần tửsource
được trả về.
Sử dụng Take(int n)
phương pháp:
var q = query.Take(10);
@Janei: nhận xét đầu tiên của tôi ở đây là về mẫu của bạn;)
Tôi nghĩ rằng nếu bạn làm như thế này, bạn muốn lấy 4, sau đó áp dụng sắp xếp trên 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
};
Khác với việc sắp xếp toàn bộ tbl_News theo idNews giảm dần và sau đó lấy 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);
không kết quả có thể khác nhau.
Tôi thích điều này:
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
};
Việc thực hiện xảy ra trên máy khách hay trong db tùy thuộc vào nơi bạn áp dụng toán tử Take. Nếu bạn áp dụng nó trước khi bạn liệt kê truy vấn (tức là trước khi bạn sử dụng nó trong một mục trước hoặc chuyển đổi nó thành một bộ sưu tập), kết quả sẽ dẫn đến toán tử SQL "top n" được gửi tới db. Bạn có thể thấy điều này nếu bạn chạy SQL profiler. Nếu bạn áp dụng mất sau khi liệt kê truy vấn, nó sẽ xảy ra trên máy khách, vì LINQ sẽ phải lấy dữ liệu từ cơ sở dữ liệu để bạn liệt kê thông qua nó
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();
Tôi đã phải sử dụng phương thức Take (n), sau đó chuyển đổi thành danh sách, Làm việc như một cơ duyê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();
Cách này hiệu quả với tôi:
var noticias = from n in db.Noticias.Take(6)
where n.Atv == 1
orderby n.DatHorLan descending
select n;
Đối với limit 1
phương pháp sử dụng FirstOrDefault()
hay First()
.
Thí dụ
var y = (from x in q select x).FirstOrDefault();