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