Bunu nasıl yaparım
Select top 10 Foo from MyTable
to SQL SQL'e mi?
Bunu nasıl yaparım
Select top 10 Foo from MyTable
to SQL SQL'e mi?
Yanıtlar:
VB'de:
from m in MyTable
take 10
select m.Foo
Bu, MyTable'ın IQueryable uyguladığını varsayar. Buna bir DataContext veya başka bir sağlayıcı aracılığıyla erişmeniz gerekebilir.
Ayrıca Foo'nun MyTable'da bir özellik adıyla eşlenen bir sütun olduğunu varsayar.
Daha fazla bilgi için http://blogs.msdn.com/vbteam/archive/2008/01/08/converting-sql-to-linq-part-7-union-top-subqueries-bill-horst.aspx adresine bakın .
Take yöntemini kullanın :
var foo = (from t in MyTable
select t.Foo).Take(10);
VB LINQ bir alma ifadesi var:
Dim foo = From t in MyTable _
Take 10 _
Select t.Foo
Belgelerden:
Take<TSource>
source
elemanlar verilinceyecount
veyasource
daha fazla eleman içermeyene kadar elemanları numaralandırır ve verir . Eğercount
öğe sayısını aşıyorsource
, tüm elemanlar arasındasource
döndürülür.
@ Janei: benim ilk yorum burada senin örnek hakkında;)
Eğer böyle yaparsanız, 4 almak, daha sonra bu 4 üzerinde sıralama uygulamak istiyorum düşünüyorum.
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
};
Tüm tbl_News değerlerini idNews'e göre azalan ve sonra 4 alarak sıralamaktan farklı
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);
Hayır ? sonuçlar farklı olabilir.
Bunu beğendim:
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
};
Alıcının istemcide mi yoksa db'de mi olacağı, alma işlecini nereye uyguladığınıza bağlıdır. Sorguyu numaralandırmadan önce (yani bir foreach içinde kullanmadan veya bir koleksiyona dönüştürmeden önce) uygularsanız, "top n" SQL operatörü db'ye gönderilir. SQL profiler çalıştırırsanız bunu görebilirsiniz. Sorguyu numaralandırdıktan sonra alma işlemini uygularsanız, istemcide gerçekleşir, çünkü LINQ, verileri numaralandırmanız için veritabanından veri almak zorunda kalacaktır.
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) yöntemini kullanmak zorunda kaldım, sonra listeye dönüştüm, Bir cazibe gibi çalıştım:
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();
Bu şekilde benim için çalıştı:
var noticias = from n in db.Noticias.Take(6)
where n.Atv == 1
orderby n.DatHorLan descending
select n;
İçin limit 1
kullanım, yöntem FirstOrDefault()
ya da First()
.
Misal
var y = (from x in q select x).FirstOrDefault();