ฉันจะทำสิ่งนี้ได้อย่างไร
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สำหรับรายละเอียดเพิ่มเติม
ใช้วิธีใช้ :
var foo = (from t in MyTable
select t.Foo).Take(10);
ใน VB LINQ มีการแสดงออก:
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);
ใช้วิธี "ข้าม" เพื่อชดเชย
ใช้วิธี "รับ" เพื่อ จำกัด
@ 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
};
คุณจะใช้วิธีใช้ (N)
ไม่ว่าจะเกิดขึ้นกับลูกค้าหรือใน db ขึ้นอยู่กับตำแหน่งที่คุณใช้ประกอบการ หากคุณนำไปใช้ก่อนที่จะระบุแบบสอบถาม (เช่นก่อนที่คุณจะใช้มันใน foreach หรือแปลงเป็นคอลเลกชัน) การใช้จะส่งผลให้ผู้ประกอบการ SQL "top n" ถูกส่งไปยัง db คุณสามารถเห็นสิ่งนี้หากคุณเรียกใช้ SQL profiler ถ้าคุณใช้การหลังจากแจกแบบสอบถามมันจะเกิดขึ้นบนไคลเอนต์เป็น LINQ จะต้องดึงข้อมูลจากฐานข้อมูลเพื่อให้คุณระบุผ่านมัน
การรับข้อมูลของ DataBase โดยไม่มีการเรียงลำดับจะเหมือนกับการสุ่ม
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();