Как мне это сделать
Select top 10 Foo from MyTable
в Linq для SQL?
Как мне это сделать
Select top 10 Foo from MyTable
в Linq для 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
возвращаются.
@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 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
};
Происходит ли получение на клиенте или в БД, зависит от того, где вы применяете оператор получения. Если вы примените его перед тем, как перечислить запрос (т. Е. Перед тем, как использовать его в foreach или преобразовать его в коллекцию), результат приведет к тому, что оператор SQL «top n» будет отправлен в базу данных. Вы можете увидеть это, если вы запустите SQL Profiler. Если вы примените дубль после перечисления запроса, это произойдет на клиенте, так как 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();