Как это сделать
Select top 10 Foo from MyTable
в Linq to SQL?
Как это сделать
Select top 10 Foo from MyTable
в Linq to 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:
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
};
В отличие от сортировки всего tbl_News по idNews спускаются, а затем берут 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);
нет? результаты могут быть разными.
Это хорошо работает в С#
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).
Будет ли выполнение происходит на клиенте или в db, зависит от того, где вы применяете оператор take. Если вы примените его до того, как вы перечислите запрос (т.е. Прежде чем использовать его в foreach или преобразовать его в коллекцию), это приведет к тому, что оператор "top n" SQL будет отправлен в db. Это можно увидеть, если вы запустили SQL-профайлер. Если вы примените заявку после перечисления запроса, это произойдет на клиенте, так как 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();
Таким образом, это сработало для меня:
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();