Jak mam to zrobic
Select top 10 Foo from MyTable
w Linq na SQL?
Jak mam to zrobic
Select top 10 Foo from MyTable
w Linq na SQL?
Odpowiedzi:
W VB:
from m in MyTable
take 10
select m.Foo
Zakłada się, że MyTable implementuje IQueryable. Być może będziesz musiał uzyskać do nich dostęp za pośrednictwem DataContext lub innego dostawcy.
Zakłada również, że Foo to kolumna w MyTable, która jest mapowana na nazwę właściwości.
Więcej informacji można znaleźć na stronie http://blogs.msdn.com/vbteam/archive/2008/01/08/converting-sql-to-linq-part-7-union-top-subqueries-bill-horst.aspx .
Użyj metody Take :
var foo = (from t in MyTable
select t.Foo).Take(10);
W VB LINQ ma wyrażenie:
Dim foo = From t in MyTable _
Take 10 _
Select t.Foo
Z dokumentacji:
Take<TSource>
wyliczasource
i daje elementy, dopókicount
elementy nie zostaną uzyskane lubsource
nie będzie więcej elementów. Jeślicount
przekroczy liczbę elementówsource
, wszystkie elementysource
są zwracane.
@Janei: mój pierwszy komentarz tutaj dotyczy twojej próbki;)
Myślę, że jeśli ci się tak podoba, chcesz wziąć 4, a następnie zastosować sortowanie na tych 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
};
Różni się od sortowania całych tbl_News według idNews malejąco, a następnie biorąc 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);
nie? wyniki mogą być inne.
Lubię to:
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
};
To, czy operacja wykonania ma miejsce na kliencie, czy w bazie danych, zależy od tego, gdzie zastosujesz operatora. Jeśli zastosujesz je przed wyliczeniem zapytania (tj. Zanim użyjesz go w foreach lub skonwertujesz na kolekcję), wykonanie spowoduje wysłanie do bazy danych SQL operatora „top n”. Możesz to zobaczyć, jeśli uruchomisz profiler SQL. Jeśli zastosujesz ujęcie po wyliczeniu zapytania, stanie się ono na kliencie, ponieważ LINQ będzie musiał pobrać dane z bazy danych, aby je wyliczyć
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();
Musiałem użyć metody Take (n), a następnie przekształcić na listę, działał jak urok:
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();
W ten sposób zadziałało dla mnie:
var noticias = from n in db.Noticias.Take(6)
where n.Atv == 1
orderby n.DatHorLan descending
select n;
Do limit 1
metod użycia FirstOrDefault()
lub First()
.
Przykład
var y = (from x in q select x).FirstOrDefault();