什么是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;