什么是Linq to SQL相当于TOP或LIMIT / OFFSET?
我该怎么做呢
Select top 10 Foo from MyTable
在LINQ to 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有一个expression式:
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);
@Janei:我的第一个评论是关于你的样本的;)
我想如果你这样做,你想要4,然后对这4种进行sorting。
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);
不是? 结果可能会有所不同。
OP实际上也提到了抵消,所以前例。 如果你想从30到60的项目,你会这样做:
var foo = (From t In MyTable Select t.Foo).Skip(30).Take(30);
使用“跳过”方法进行偏移。
使用“Take”方法进行限制。
这在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 };
你会使用Take(N)方法。
在客户端还是在数据库中发生取决于您在哪里应用接pipe操作员。 如果您在枚举查询之前应用它(即,在将其用于foreach或将其转换为集合之前),则会导致将“top n”SQL运算符发送到db。 你可以看到这个如果你运行SQL分析器。 如果您在枚举查询后应用了这个查询,它会在客户端发生,因为LINQ将不得不从数据库中检索数据,以便通过它来枚举
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();
在不进行sorting的情况下取出数据库的数据与随机取出相同
我不得不使用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();
这样对我有效:
var noticias = from n in db.Noticias.Take(6) where n.Atv == 1 orderby n.DatHorLan descending select n;