Як це зробити?
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
};
Незалежно від того, чи відбуватиметься у клієнта або в db, залежить від того, де ви застосуєте оператора take. Якщо ви застосуєте його перед тим, як перерахувати запит (тобто перед тим, як використовувати його в foreach або перетворити його в колекцію), взяття результату призведе до того, що "n n" SQL-оператор буде відправлений на db. Це можна побачити, якщо ви запускаєте SQL-профілер. Якщо ви застосуєте take після перерахування запиту, це станеться з клієнтом, оскільки 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();