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