آموزش جستجوی پیشرفته وب سایت با کد ASP.NET MVC

چگونه یک کد جستجو در وب سرویس با ASP.NET MVC بنویسیم؟ به احتمال خیلی زیاد برای شما پیش اومدده که یک تابع برای جست و جو در دیتابیس نوشته باشید.ساده ترین روش به این صورت است که به ازای هر فیلد دیتابیس یک 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 قرار خواهم داد . امیدوارم تونسته باشم مطلب مفیدی ارائه داده باش


سبحان مظفری
سبحان مظفری

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++ .

30 آبان 1396 این مطلب را ارسال کرده

نظرات