parsdarab
چهارشنبه 16 دی 1394, 22:39 عصر
با سلام
سناریو اینه که ما سه پارامتر داریم.
شرط ما می باشد که شامل NotNull,Contaion
نوع رشته ای
filterCondition
نام فیلد می باشد مثلا caption,tarikh
نوع رشته ای
filterDataField
مقدار وارد شده توسط کاربر برای جستجو
نوع رشته ای
filterValue
حالا با استفاده از جنریک ها می خواهیم یک عبارت تولید کنیم که عبارت زیر را برگشت دهد.
Expression<Func<BaseGender, bool>>
کلاس BaseGender فیلدهای خاص خودش را دارد.اما با استفاده از جنریکها چطور میشه کار کرد؟ نمی خام کدها رو به ازای هر کلاس تکرار کنم
Expression<Func<BaseGender, bool>> temp = null;
switch (filterCondition)
{
case "CONTAINS":
temp = CONTAINS(filterDataField, filterValue, temp);
break;
}
تابع
private static Expression<Func<BaseGender, bool>> CONTAINS(string filterDataField, string filterValue, Expression<Func<BaseGender, bool>> temp)
{
switch (filterDataField)
{
case "Caption":
temp = x => x.Caption.ToLower().Contains(filterValue.ToLower() );
break;
case "Description":
temp = x => x.Description.ToLower().Contains(filterValue.ToLow er());
break;
default:
break;
}
return temp;
}
سناریو اینه که ما سه پارامتر داریم.
شرط ما می باشد که شامل NotNull,Contaion
نوع رشته ای
filterCondition
نام فیلد می باشد مثلا caption,tarikh
نوع رشته ای
filterDataField
مقدار وارد شده توسط کاربر برای جستجو
نوع رشته ای
filterValue
حالا با استفاده از جنریک ها می خواهیم یک عبارت تولید کنیم که عبارت زیر را برگشت دهد.
Expression<Func<BaseGender, bool>>
کلاس BaseGender فیلدهای خاص خودش را دارد.اما با استفاده از جنریکها چطور میشه کار کرد؟ نمی خام کدها رو به ازای هر کلاس تکرار کنم
Expression<Func<BaseGender, bool>> temp = null;
switch (filterCondition)
{
case "CONTAINS":
temp = CONTAINS(filterDataField, filterValue, temp);
break;
}
تابع
private static Expression<Func<BaseGender, bool>> CONTAINS(string filterDataField, string filterValue, Expression<Func<BaseGender, bool>> temp)
{
switch (filterDataField)
{
case "Caption":
temp = x => x.Caption.ToLower().Contains(filterValue.ToLower() );
break;
case "Description":
temp = x => x.Description.ToLower().Contains(filterValue.ToLow er());
break;
default:
break;
}
return temp;
}