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

نام تاپیک: مشکل جستجو در دیتابیس با انتیتی فریمورک

  1. #1
    کاربر دائمی آواتار samiasoft
    تاریخ عضویت
    مهر 1391
    محل زندگی
    اردبیل
    پست
    1,196

    مشکل جستجو در دیتابیس با انتیتی فریمورک

    سلام وقت بخیر
    برای اینکه کلمه موردنظر را در دیتابیس جستجو کنم به کمک انتیتی فریمورک به این صورت دستور رو نوشتم :

    var searchRecords = (from rows in database.tbl_sama 
    where rows.title.Contains(txt_search.Text)
    select new
    {
    rows.id,
    rows.codeNumber,
    rows.title,
    }).ToList();

    dbGridView.DataSource = searchRecords;


    اما متاسفانه در نتایج جستجو موارد نامرتبط هم دیده میشه ! که هدفم این بود فقط ردیف هایی که شامل کلمه "زلزله" باشه را بدست بیارم.
    ایا این مشکل بخاطر استفاده از Contains هست ؟

    برای حل مشکل بصورت موقت اومدم از کوئری اسکیوال استفاده کردم بدین شکل

     var records2 = db.tbl_sama 
    .SqlQuery("select * from tbl_sama where title like '%" + txt_search.Text + "%' ")
    .ToList();

    dataGridView_standards.DataSource = records2;


    و همانطور که مشاهده میکنید بدرستی نتایج نمایش داده میشه.

    اما بدون استفاده از کوئری اسکیوال راه حل دیگری هم وجود داره ؟

    خاطرم هست چندسال پیش هم همین مشکل را مطرح کرده بودم ولی متاسفانه با جستجو تاپیک مربوطه را پیدانکردم.

    روشی هم در این صفحه گفته شده که کلمات را با split جداکنیم و ... را هم تست کردم اما باز هم همان مشکل را دارد .
    https://entityframework.net/knowledg...bda-expression
    آخرین ویرایش به وسیله samiasoft : چهارشنبه 06 بهمن 1400 در 04:22 صبح

  2. #2

    نقل قول: مشکل جستجو در دیتابیس با انتیتی فریمورک

    من فکر میکنم رویدادی که این کد را درونش نوشته اید کار نمیکنه.

    عکسها هم یکی هست تفاوت معلوم نیست.




  3. #3
    کاربر دائمی آواتار samiasoft
    تاریخ عضویت
    مهر 1391
    محل زندگی
    اردبیل
    پست
    1,196

    نقل قول: مشکل جستجو در دیتابیس با انتیتی فریمورک

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    من فکر میکنم رویدادی که این کد را درونش نوشته اید کار نمیکنه.

    عکسها هم یکی هست تفاوت معلوم نیست.
    بسیار ممنونم از توجهتون ... حق با شماست تصویر دوم اصلاح شد.

    دستور حتی داخل یک باتن قرار داده شده بود و به همین روال بالا مشکل پابرجا بود.

    امروز بالاخره موفق شدم مشکل رو حل کنم جالبه وقتی به این شکل نوشتم بدرستی عملیات جستجو موارد مرتبط را نشون داد !!!
    var searchRecords = (from rows in database.tbl_sama 
    select new
    {
    rows.id,
    rows.codeNumber,
    rows.title,
    }).ToList();

    dbGridView.DataSource = searchRecords.Where(c => c.title.Contains(txt_search.Text)).ToList();

    اما ایا بنظرتون این اصولی هست ؟
    ناگفته نماند فقط هم وقتی داخل شرط از contintes استفاده میکنم با چنین مشکلی روبرو میشوم وگرنه برای سایر شرط ها مثل equal همان دستورات قبلی بدرستی اجرا میشد !

  4. #4

    نقل قول: مشکل جستجو در دیتابیس با انتیتی فریمورک

    نقل قول نوشته شده توسط samiasoft مشاهده تاپیک
    بسیار ممنونم از توجهتون ... حق با شماست تصویر دوم اصلاح شد.

    دستور حتی داخل یک باتن قرار داده شده بود و به همین روال بالا مشکل پابرجا بود.

    امروز بالاخره موفق شدم مشکل رو حل کنم جالبه وقتی به این شکل نوشتم بدرستی عملیات جستجو موارد مرتبط را نشون داد !!!
    var searchRecords = (from rows in database.tbl_sama 
    select new
    {
    rows.id,
    rows.codeNumber,
    rows.title,
    }).ToList();

    dbGridView.DataSource = searchRecords.Where(c => c.title.Contains(txt_search.Text)).ToList();

    اما ایا بنظرتون این اصولی هست ؟
    ناگفته نماند فقط هم وقتی داخل شرط از contintes استفاده میکنم با چنین مشکلی روبرو میشوم وگرنه برای سایر شرط ها مثل equal همان دستورات قبلی بدرستی اجرا میشد !
    این کوئری همه سطرها رو لود میکنه و بعد روی اون جستجو رو انجام میده.
    در اینگونه موارد از پروفایلر یا هر راه دیگر ، ببینید چه کوئری روی دیتابیس اجرا میشه .

    همون کوئری که خروجی اشتباه داشت رو اصلاح کنید و به جای contains از فانکشن like استفاده کنید
    https://docs.microsoft.com/en-us/dot...ramework-6.2.0
    https://docs.microsoft.com/en-us/dot...iew=efcore-6.0

  5. #5
    کاربر دائمی آواتار samiasoft
    تاریخ عضویت
    مهر 1391
    محل زندگی
    اردبیل
    پست
    1,196

    نقل قول: مشکل جستجو در دیتابیس با انتیتی فریمورک

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    این کوئری همه سطرها رو لود میکنه و بعد روی اون جستجو رو انجام میده.
    در اینگونه موارد از پروفایلر یا هر راه دیگر ، ببینید چه کوئری روی دیتابیس اجرا میشه .

    همون کوئری که خروجی اشتباه داشت رو اصلاح کنید و به جای contains از فانکشن like استفاده کنید
    https://docs.microsoft.com/en-us/dot...ramework-6.2.0
    https://docs.microsoft.com/en-us/dot...iew=efcore-6.0
    بسیار ممنونم

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

  1. پاسخ: 1
    آخرین پست: دوشنبه 13 آبان 1398, 00:26 صبح
  2. پاسخ: 2
    آخرین پست: پنج شنبه 11 تیر 1394, 16:11 عصر
  3. پاسخ: 7
    آخرین پست: شنبه 11 بهمن 1393, 09:50 صبح
  4. مبتدی: اتصال دیتا گرید ویو به دیتا بیس استفاده از انتیتی فریمورک
    نوشته شده توسط mrmaleki در بخش C#‎‎
    پاسخ: 1
    آخرین پست: پنج شنبه 04 اردیبهشت 1393, 17:47 عصر
  5. سوال: استفاده از انتیتی فریم ورک با دیتا بیس های بزرگ با حجم داده بالا
    نوشته شده توسط sadeghhp در بخش برنامه نویسی مبتنی بر Microsoft .Net Framework
    پاسخ: 3
    آخرین پست: سه شنبه 11 بهمن 1390, 00:44 صبح

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

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