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

时间:2008-10-10 16:42:22

标签: linq-to-sql

我该怎么做

Select top 10 Foo from MyTable

在Linq to SQL中?

14 个答案:

答案 0 :(得分:246)

使用Take method

var foo = (from t in MyTable
           select t.Foo).Take(10);

在VB中LINQ有一个表达式:

Dim foo = From t in MyTable _
          Take 10 _
          Select t.Foo

来自文档:

  

Take<TSource>枚举source并生成元素,直到count元素被生成或source不再包含元素。如果count超过source中的元素数量,则会返回source的所有元素。

答案 1 :(得分:143)

在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

答案 2 :(得分:33)

使用Take(int n)方法:

var q = query.Take(10);

答案 3 :(得分:18)

OP实际上也提到了偏移,所以对于ex。如果你想把物品从30到60,你会这样做:

authCookie

使用&#34; Skip&#34;偏移方法 使用&#34; Take&#34;限制方法。

答案 4 :(得分:13)

@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);
不是吗?结果可能会有所不同。

答案 5 :(得分:5)

这适用于C#

var q = from m in MyTable.Take(10)
        select m.Foo

答案 6 :(得分: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
                };

答案 7 :(得分:3)

您可以使用Take(N)方法。

答案 8 :(得分:3)

在客户端或数据库中进行接收取决于您应用take运算符的位置。如果在枚举查询之前应用它(即在foreach中使用它或将其转换为集合之前),则会导致将“top n”SQL运算符发送到db。如果运行SQL事件探查器,则可以看到此信息。如果在枚举查询后应用take,它将在客户端上发生,因为LINQ将不得不从数据库中检索数据以供您枚举

答案 9 :(得分:2)

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();

答案 10 :(得分:1)

在不进行排序的情况下获取DataBase的数据与随机获取相同

答案 11 :(得分:0)

我不得不使用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();

答案 12 :(得分:0)

这种方式对我有用:

var noticias = from n in db.Noticias.Take(6)
                       where n.Atv == 1
                       orderby n.DatHorLan descending
                       select n;

答案 13 :(得分:0)

对于limit 1,请使用方法FirstOrDefault()First()

示例

var y = (from x in q select x).FirstOrDefault();