如何进行
Select top 10 Foo from MyTable
在Linq到SQL中?
使用Take方法:
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
来自文件:
CCD_ 1枚举CCD_ 2并产生元素,直到产生了CCD_ 3元素或CCD_。如果
count
超过了source
中的元素数量,则返回source
的所有元素。
在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(int n)
方法:
var q = query.Take(10);
OP实际上也提到了偏移量,所以对于例如,如果你想获得30到60的项目,你可以这样做:
var foo = (From t In MyTable
Select t.Foo).Skip(30).Take(30);
使用"跳过"方法进行偏移
使用"Take"方法进行限制。
@Janei:我在这里的第一条评论是关于您的示例;)
我认为如果你喜欢这样,你想取4,然后对这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
};
不同于按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);
没有?结果可能会有所不同。
这在C#中运行良好
var q = from m in MyTable.Take(10)
select m.Foo
take发生在客户端还是数据库中取决于应用take运算符的位置。如果在枚举查询之前应用它(即在foreach中使用它或将其转换为集合之前),则take将导致"top n"SQL运算符被发送到数据库。如果运行SQL探查器,您可以看到这一点。如果您在枚举查询后应用take,它将发生在客户端上,因为LINQ将不得不从数据库中检索数据,以便您通过它进行枚举
我喜欢这个:
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)方法。
在不排序的情况下获取数据库的数据与随机获取相同
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)方法,然后转换到list,工作起来很有魅力:
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;