در
بخش اول، با کتابخانه Gridify آشنا شدیم و در
بخش دوم، متدهای الحاقی آن را بررسی کردیم؛ در این بخش به بررسی GridifyMapper میپردازیم.
GridifyMapper :
کتابخانه Gridify به صورت خودکار از یک Mapper توکار برای برقراری ارتباط بین نام فیلد (string) وارد شده و پراپرتی که قرار است شرطها بر روی آن اعمال شود، استفاده میکند. به همین جهت اگر در فیلتر خود عبارتی مانند"Name==Ali,Age>32" داشته باشید، در کلاس مقصد به دنبال پراپرتیهای Name و Age گشته و شرط را بر روی آنها اعمال میکند.
با شخصی سازی این Mapper توکار میتوانیم کنترل بیشتری بر روی رفتار gridify داشته باشیم. به طور خلاصه مزایای شخصی سازی Mapper موارد زیر میباشند:
- کنترل فیلدهایی که قصد داریم توسط Gridify پشتیبانی شوند
- تغییر نام فیلد در رشته string برای جستجو
- تغییر مقدار وارد شده در جستجو، قبل از اعمال فیلترینگ توسط Mapper Convertor
- اضافه کردن پشتیبانی از پراپرتیهای کلاسهای فرزند (Child Classes)
- پشتیبانی از DTO آبجکتها با پراپرتیهای متفاوت
ساخت Mapper سفارشی:
var customMappings = new GridifyMapper<Person>();
ساخت Mapper سفارشی حساس به حروف کوچک و بزرگ
به صورت پیش فرض GridifyMapper به حروف کوچک و بزرک حساس نیست. این رفتار را میتوان با ارسال true به Constructor آن، تغییر داد.
var customMappings = new GridifyMapper<Person>(true);
برای استفاده از یک Mapper سفارشی میتوانیم آن را به عنوان آرگومان دوم، به متدهای الحاقی Gridify ارسال کنیم.
var result = _dbContext.Persons.Gridify(filter , customMappings);
افزودن یک Map جدید
برای افزودن یک Map سفارشی میتوان از متد AddMap استفاده کرد. به طور مثال در مثال زیر، ما کلمه name را به پراپرتی FullName مپ کردهایم. به همین جهت میتوان برای جستجو در پراپرتی FullName، از چنین فیلتری استفاده کرد:
name ==Ali. customMappings.AddMap("name", q => q.FullName );
متد GenerateMappings
کلاس GridifyMapper متدی به نام GenerateMappings دارد که به صورت توکار از آن برای تولید Mapها با توجه به نام پراپرتیهای کلاس مقصد استفاده میکند. استفاده از این متد، بسیار کاربردی است؛ چرا که فرض کنید قصد دارید تمام پراپرتیهای موجود در کلاستان را توسط Gridify پشتیبانی کنید، بهغیر از یک مورد مانند Password. در چنین حالتی میتوان با استفاده از این متد، همه Mappingها را ایجاد کرده و سپس تنها Password را از لیست حذف نمایید (متد RemoveMap):
var customMappings = new GridifyMapper<Person>()
.GenerateMappings()
.RemoveMap("Password");
Custom Convertor
درصورت نیاز به اعمال تغییرات در مقدار ورودی جستجوها قبل از انجام فیلترینگ، میتوانید از این ویژگی استفاده نمایید. به طور مثال ما قصد داریم همیشه مقادیر ارسالی name را با حروف کوچک، در دیتابیس جستجو کنیم. آرگومان سوم متد AddMap امکان تغییر مقادیر ورودی را به ما میدهد:
var customMappings = new GridifyMapper<Person>()
.AddMap("name" , q=> q.FullName , q => q.ToLower() )
همینطور درصورت نیاز برای جستجوی مقدار null هم میتوان از این امکان استفاده کرد. مثال :
"date==null" var gm = new GridifyMapper<Person>().GenerateMappings();
gm.AddMap("date", g => g.BrithDate , q => q == "null" ? null : q);