• 1397/10/25

فیلتر کردن جدول در پروژه :

سلام استاد عزیز روز بخیر

در طول پروژه بر روی جدول فیلترهایی اضافه کردین که بر اساس آنها نتایج جدول فیلتر میشد  .

من یک کاربر دارم و  یک اطلاعات پرسنلی که کاربری که از نوع پرسنل باشد ، اطلاعات پرسنلی هم دارد.

من اطلاعات لیست پرسنل را از یک ویو مدل میگیرم که این ویو مدل از جدول کاربر و جدول اطلاعات پرسنلی ایجاد میشود.  و بر روی همه ستونهای این لیست (table) فیلتر اعمال کرده ام و با Ajax یک این فیلتر ها را به سرویس ارسال میکنم تا اعمال شود . و یک QueryBuilder هم نوشته ام که فیلترهای وارد شده را به کوئری تبدیل میکند و بر روی بانک داده اعمال میکنم و نتایج را برمی گردانم.
زمانی که ویو مدل از یک جدول استفاده کند مشکلی وجود ندارد و کار میکند. زیرا فیلترها بر روی یک جدول باید اعمال شود و در کوئری نام جدول را ذکر میکنم.

 IQueryable<User> result = _context.Users;
            if (!string.IsNullOrEmpty(filterQuery))
            {
                filterQuery = "select * from Users where " + filterQuery;
                result = result.FromSql(filterQuery);
            }

//Convert result to viewModel

اما زمانی که ویو مدل از چند جدول ایجاد شده باشد مانند همین کاربری که اطلاعات پرسنلی دارد زمان ساخت کوئری برای فیلتر مشکل ایجاد میشود زیرا در کوئری ای که میسازم ستونها متعلق به دو یا چند جدول هستند نه یک جدول که نام ان جدول را ذکر کنم !


ایده ای که به ذهنم رسید این بود که از View استفاده کنم در روش ModelFirst ما در بانک داده ویو میساختیم و اینطوری میتونستم این کوئری های داینامیک را روی ویو ها اعمال کنم اما اینجا نمیدانم چه روشی استفاده کنم. ممنون میشم راهنمایی کنید.

ایده خودم:

شما در فیلتر کردن ابتدا فیلتر ها را اعمال میکردین سپس تبدیل به ویو مدل میکردین که روش درستی بود، میتونیم از همان ویو مدل استفاده کنم و اطلاعات را در ویو مدل بریزم بعد فیلتر را روی آن اعمال کنم. اما مشکل این است که کل اطاعات جدول لود میشود و به ویو مدل تبدیل میشود بعد فیلتر میشود که فکر نکنم روش درستی باشد.

 IQueryable<User> result = _context.Users;

//Convert result to viewModel


            if (!string.IsNullOrEmpty(filterQuery))
            {
                filterQuery = "select * from Users where " + filterQuery;
                viewModel= viewModel.FromSql(filterQuery);
            }

 

logo-enamadlogo-samandehi