我怎么做呢
Select top 10 Foo from MyTable
在Linq到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(N)方法。
使用采取的方法:
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不再包含更多元素为止。如果count超过了source中的元素数量,则返回source中的所有元素。
Take<TSource>
source
count
使用Take(int n)方法:
Take(int n)
var q = query.Take(10);
这在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 };
对数据库的数据进行不排序的取取等同于随机取取
@Janei:我在这里的第一个评论是关于你的样品;)
我认为如果你这样做,你想取4,然后对这4个应用排序。
不同于用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);
没有?结果可能不同。
取是发生在客户端还是在db中,这取决于您在哪里应用了取操作符。如果你在枚举查询之前应用它(即在foreach中使用它或将其转换为集合之前),take将导致“top n”SQL操作符被发送到db。如果运行SQL分析器,就可以看到这一点。如果在枚举查询之后应用take,它将发生在客户端,因为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();
我必须使用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();
OP实际上也提到了偏移量,所以例如,如果你想要从30到60的项目,你会这样做:
var foo = (From t In MyTable Select t.Foo).Skip(30).Take(30);
使用“Skip”方法进行偏移
这种方法对我很有效:
var noticias = from n in db.Noticias.Take(6) where n.Atv == 1 orderby n.DatHorLan descending select n;