什么是Linq to SQL相当于TOP或LIMIT / OFFSET?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是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中的一个列,它被映射到属性名称。
在没有排序的情况下获取DataBase的数据与随机获取相同
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();
这样它对我有用:
var noticias = from n in db.Noticias.Take(6)
where n.Atv == 1
orderby n.DatHorLan descending
select n;
对于limit 1
使用方法FirstOrDefault()
或First()
。
例
var y = (from x in q select x).FirstOrDefault();
使用Take method:
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(int n)
方法:
var q = query.Take(10);
OP实际上也提到了偏移,所以对于ex。如果你想把物品从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
我喜欢这个:
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)方法。
获取是在客户端还是在数据库中进行取决于您应用take操作符的位置。如果在枚举查询之前应用它(即在foreach中使用它或将其转换为集合之前),则会导致将“top n”SQL运算符发送到db。如果运行SQL事件探查器,则可以看到此信息。如果在枚举查询后应用take,它将在客户端上发生,因为LINQ将不得不从数据库中检索数据,以便您通过它进行枚举
以上是关于什么是Linq to SQL相当于TOP或LIMIT / OFFSET?的主要内容,如果未能解决你的问题,请参考以下文章
LINQ体验——LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods
LINQ to SQL语句之Top/Bottom和Paging和SqlMethods