دسته بندی ها
13:58 1398/09/14

جستجو با استفاده از دستورات Entity Framework

مشخصات سوال کننده :
کاربر : hamid_b     امتیاز کاربر : 510     رتبه کاربر : 4
دسته بندی : سی شارپ Asp.net Mvc Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 4747
پاسخ دهنده : pedram_khan 14:23 1398/09/14

کافیه توی گوگل سرچ کنید create search case insensitive ef و نتایج زیادی برای جستجو با استفاده از دستورات Entity Framework که حساس به حروف بزرگ و کوچک نباشن میاره. اما در ادامه براتون توضیح میدم که چجوری یک چستچو در رشته ها با استفاده از دستورات انتیتی فریم ورک ایجاد کنید.

 

فرق بین IEnumerable و IQueryable

یک نکته مهم در هنگام جستجو این هست که شما نتایج حاصل از جستجو رو یا باید در یک List از نوع IEnumerable ذخیره کنید و یا یک List از نوه IQueryable. اما فرق این دو هنگام جستجو چی هست؟

بهتر هست که نتایج جستجو رو داخل یک List از نوع IQueryable ذخیره کنید چون این نوع عملیات جستجو رو در سمت دیتابیس انجام میده و نتیجه رو به عنوان خروجی دریافت میکنه که خودش در بزرگ بودن یا کوچک بودن حروف موثر هست. اما در IEnumerable جستجو و فیلتر سمت سرور انجام میشه. یعنی نتایج کامل از دیتابیس دریافت میشه و نتایج دریافت شده فیلتر میشه.

 

این نکته ای بود که لازم بود بدونید. در تصویر زیر نحوه کار Inumerable رو مشاهده می کنید

 

روش کار IEnumerable

 

و در تصویر زیر هم روش کار IQueryable رو میتونید مشاهده کنید

 

روش کار IQueryable

 

جستجو با استفاده از دستورات Entity Framework

البته موارد بالا ممکنه مشکل شما رو حل نکنن و برای رفع مشکل شما 2 راه حل معرفی می کنم.

 

استفاده از تابع ToLower

شما میتونید توی کوئری خودتون با استفاده از تابع ToLower هم عبارت سرچ شده رو به صورت حروف کوچک تبدیل کنید و هم نتایج حاصل از اجرای کوئری در دیتابیس رو. برای این منظور میتونید از کد زیر استفاده کنید

 

var Query = (from a in _db.Users.Where(u => u.firstname.ToLower().Contains(searchValue.ToLower()))).ToList();

 

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

 

استفاده از ToUpper

با استفاده از دستور ToUpper هم میشه دقیقا جستجو رو فارغ از بزرگ یا کوچک بودن حروف انجام داد. این دستور هم مثل دستور ToLower هست با این تفاوت که عبارت جستجو شده و نتایج حاصل از جستجو رو به حروف بزرگ تبدیل میکنه و جستجو رو انجام میده. به قطعه کد زیر دقت کنید

 

var Query = (from a in _db.Users.Where(u => u.firstname.ToUpper().Contains(searchValue.ToUpper()))).ToList();

 

به این ترتیب می تونید به راحتی جستجو با استفاده از دستورات Entity Framework رو بدون در نظر گرفتن بزرگی یا کوچکی حروف انجام بدید.

به این پاسخ امتیاز بدهید    1
امتیاز: 274 رتبه: 6
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود