نمایش نتایج 1 تا 6 از 6

نام تاپیک: برداشت اطلاعات از دیتابیس با ef core

  1. #1
    کاربر جدید آواتار alirezaavini
    تاریخ عضویت
    شهریور 1397
    محل زندگی
    تهران
    سن
    27
    پست
    20

    Question برداشت اطلاعات از دیتابیس با ef core

    سلام
    داخل برنامه کنسولی که دارم قصد دارم اطلاعات دیتابیسو فقط 10 تای اولو بردارم بعد مثلا 10 تای دومو
    حالا سوالی که برام پیش اومده ااینه که داخل ef اگه بخوام این کارو کنم باید اول اطلاعات دیتابیسو بریزم داخل لیست بعد 10 تای اولو بردارم ولی من میخوام فقط 10تای اولو مستقیم از دیتابیس داخل لیست داشته باشم.
    از دوستان اگر کسی راهنمایی کنه ممنون میشم.

  2. #2

    نقل قول: برداشت اطلاعات از دیتابیس با ef core

    سلام دوست عزیز.
    شما میتونید از متد.Take و .Skip استفاده کنید :
    _db.Products.Take(10).ToList();
    _db.Products.Skip(100.Take(10).ToList();
    متد اول فقط ده تای اول رو برای شما واکشی میکنه و متد دوم 10 تا رو رد میکنه و 10 تای دوم رو واکشی میکنه.

  3. #3

    نقل قول: برداشت اطلاعات از دیتابیس با ef core

    لازم نیست به لیست تبدیل کنید. خروجی 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 فقط کوئری هست و نه خود داده تا زمانی که ازش استفاده نکنید داده ها رو از دیتابیس خارج نمیکنه.

  4. #4
    کاربر جدید آواتار alirezaavini
    تاریخ عضویت
    شهریور 1397
    محل زندگی
    تهران
    سن
    27
    پست
    20

    Question نقل قول: برداشت اطلاعات از دیتابیس با ef core

    نقل قول نوشته شده توسط hakim22 مشاهده تاپیک
    لازم نیست به لیست تبدیل کنید. خروجی 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 فقط کوئری هست و نه خود داده تا زمانی که ازش استفاده نکنید داده ها رو از دیتابیس خارج نمیکنه.

    از پاسخی که دادید بسیار سپاسگزارم
    فقط سوال دیگه ای داشتم
    چطور میتونم درون select شرط بزارم که فقط اسامی که شبیه پارامتر name هست رو انتخاب کنه؟ به عنوان مثال ممکنه من 10کاربر داشته باشم که اسمشون علی باشه...
    10 تای اول از دیتابیس که نامشان علی است یعنی دیتابیس دیگه سراغ بقیه علی ها نره
    ولی آیا بعدش میشه 10 تای دومو صدا زد؟

  5. #5

    نقل قول: برداشت اطلاعات از دیتابیس با ef core

    برای شرط باید از Where استفاده کنید. برای رد کردن باید از Skip استفاده کنید.
    برای مشاهده ی 10 تا 10تا باید مقدار Skip رو مشخص کنید. برای 10 تای اول صفر و برای 10 تای دوم 10 و برای ده تای سوم 20 و ...


    public IActionResult GetTopTen(int skipCount,int takeCount)
    {
    var model = _db.Users
    .Select(u => new { u.Givenname, u.Birthday })
    .Where(u=>u.Givenname=="Ali")
    .OrderBy(u => u.Birthday).Skip(skipCount).Take(takeCount);

    return Ok(model.ToList());
    }

  6. #6

    نقل قول: برداشت اطلاعات از دیتابیس با ef core

    میتونید برای Paging و یک سری اعمال دیگه مثل Sorting, Searching از Sieve استفاده کنید.

تاپیک های مشابه

  1. سوال: مشکل در تولید مدل دیتابیس در core 2
    نوشته شده توسط fakhravari در بخش ASP.NET MVC
    پاسخ: 2
    آخرین پست: چهارشنبه 11 مهر 1397, 19:49 عصر
  2. مشکل لود تمام جداول دیتابیس در کانتکس Entity Framwork Core
    نوشته شده توسط valentine093 در بخش برنامه نویسی مبتنی بر Microsoft .Net Framework
    پاسخ: 0
    آخرین پست: چهارشنبه 11 بهمن 1396, 09:22 صبح
  3. تبدیل دیتابیس فاكس پرو (FoxPro) به دیتابیس (SQL SERVER 2008) با پشتیبانی از زبان فارسی
    نوشته شده توسط majid_darab در بخش مسائل مرتبط با نصب و راه اندازی
    پاسخ: 9
    آخرین پست: سه شنبه 15 فروردین 1391, 16:14 عصر
  4. پاسخ: 0
    آخرین پست: چهارشنبه 20 بهمن 1389, 16:56 عصر
  5. پاسخ: 2
    آخرین پست: چهارشنبه 17 آذر 1389, 20:08 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •