درخواست های ارتباط
جستجو
    لیست دوستان من
    صندوق پیام
    همه را دیدم
    • در حال دریافت لیست پیام ها
    صندوق پیام
    رویدادها
    همه را دیدم
    • در حال دریافت لیست رویدادها
    همه رویدادهای من
    اطلاعات مطلب
      مدرس/نویسنده
      سبحان مظفری
      امتیاز: 1403
      رتبه:1000
      0
      6
      0
      16
      I am sobhan mozafari from Iram . I am working with Microsoft Technologies Like ASP.NET MVC , C# and SQL Server . I Interested in Node.js and Google Could computing and my favorite C++ . پروفایل کاربر

      جست و جو پیشرفته در ASP.NET MVC

      تاریخ 12 ماه قبل
      نظرات 0
      بازدیدها 230
      به احتمال خیلی زیاد برای شما پیش اومدده که یک تابع برای جست و جو در دیتابیس نوشته باشید.ساده ترین روش به این صورت است که به ازای هر فیلد دیتابیس یک Quarry بنویسید که کدبه شکل زیر خواهد بود
       if (_SearchBy == "Code")
                      search = _Service.Where(x => x.Code == _search).ToList();
                  if (_SearchBy == "Mail")
                      search = _Service.Where(x => x.Mail == _search).ToList();
                  if (_SearchBy == "PhoneNumber")
                      search = _Service.Where(x => x.PhoneNumber == _search).ToList();
      

      ولی اگه تعداد فیلدها زیاد بشود این کار باعث وقت گیر شدن پروژه میشود.یک روش دیگر این است که با استفاده از dynamic linq جست و جو رو طراحی کنیم، که این کار هم به نصبت سخت است.این روش را هم میتوانید در این لینک مشاهده کنید.ولی روش بهتر و اسانتر سلکت زدن فیلدها بر اساس پارامتر های رشته ای هست. تابع زیر را در نظر بگیرد
           public List<Your Class> Search(string _search, string _SearchBy)
              {
          var ResultSerach = _Service.Where(GetPropertyContainsValueExpression<Your Class>(_SearchBy, _search)).ToList();
              }
      

      تابع بالا دو ورودی میگیرد که یکی نام فیلدی که میخواهیم بر اساس آن جست و جو کنیم،و مقدار دیگر هم مقداری که میخوایم جست و جو کنیم.توجه!!تابع GetPropertyContainsValueExpression کار جست و جو را انجام میدهد و چون ما تقریبا در تمام کلاسا عمل جست وجو داریم باید آنرا در یک کلاس base یا به صورت یک extension method بنویسیم. حال داخل متد GetPropertyContainsValueExpression میرویم
       public static Expression<Func<TSource, bool>> GetPropertyContainsValueExpression<TSource>(string propertyName, string value)
              {
                  var param = Expression.Parameter(typeof(TSource), "x");
                  var prop = Expression.Property(param, propertyName);
                  var valueExp = Expression.Constant(value, typeof(string));
                  var contains = Expression.Call(prop, "Contains", null, valueExp);
                  return Expression.Lambda<Func<TSource, bool>>(contains, param);
              }
      

      همان طور که در تابع بالا ملاحظه مشخص است.این تابع به صورت جنریک بوده و دو ورودی propertyName ,value که همان نام فیلد و مقدار جست و جو است رو دارا میباشد.بقیه کد بصورت بهینه توسط متخصصان نوشته شده است.کد این اموزش هم به زودی در github قرار خواهم داد . امیدوارم تونسته باشم مطلب مفیدی ارائه داده باشم

      برچسب ها
      مطالب مرتبط

      در حال دریافت اطلاعات

      نظرات
      هیچ نظری ارسال نشده است

        برای ارسال نظر ابتدا به سایت وارد شوید

        arrow