Linq to SQL 相当于 TOP 或 LIMIT/OFFSET 是什么?



如何进行

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;

最新更新