لازم نیست به لیست تبدیل کنید. خروجی DbSet از نوع IQueryable هست. به این معنی که یک کوئری هست و شامل داده های خروجی نمیشه. برای دریافت 10 تای اول ابتدا باید مشخص کنید اول بودن بر چه اساسی هست. ابتدا باید داده ها را بر اساس یک فیلدی Order کنید.
public IActionResult GetTopTen()
{
var model = _db.Users
.Select(u => new { u.Givenname, u.Birthday })
.OrderBy(u => u.Birthday).Take(10);
return Ok(model.ToList());
}
وقتی کدر رو اجرا کنید در EF این دستورات تولید میشه :
Executed DbCommand (109ms) [Parameters=[@__p_0='?'], CommandType='Text', CommandTimeout='30']
SELECT "u"."Givenname", "u"."Birthday"
FROM "Users" AS "u"
ORDER BY "u"."Birthday"
LIMIT @__p_0
می بینید که داده ها از طریق دستور Select دریافت میشه و فقط اطلاعاتی که مشخص کردید از دیتابیس استخراج میشه.
بعضی کوئری ها در SQL قابل اجرا نیست و EF اونهارو از دیتابیس خارج میکنه و درون حافظه اجرا میکنه. اینها محدود به موارد خاصی میشه که در SQL Server دستور معادلی براش نیست.
بهتر قبل از استفاده از دادهها اونها رو به لیست تبدیل کنید. از اونجایی که IQueryable فقط کوئری هست و نه خود داده تا زمانی که ازش استفاده نکنید داده ها رو از دیتابیس خارج نمیکنه.