• 1399/04/13

استفاده از IQueryable در این معماری :

با سلام

استاد من پروژه کور پیشرفته را با استفاده از این معماری دارم پیاده سازی می کنم و اما در مورد کد زیر سوالی برایم پیش آمده

در سرویس:

public ShowUsersListForAdminViewModel GetUsers(int pageId = 1, string filterEmail = "", string filterUserName = "")
        {
            IQueryable<User> result = _userRepository.GetUsers( filterEmail, filterUserName ) as IQueryable<User>;

            // paging
            int take = 20;
            int skip = (pageId - 1) * take;

            return new ShowUsersListForAdminViewModel()
            {
                Users = result.OrderBy( u => u.RegisterDate).Skip( skip ).Take( take ).ToList(),
                CurrentPage = pageId,
                PageCount = ( int )Math.Ceiling( ( decimal )result.Count() / take )
            };
        }

در ریپوزیتوری:

        public IEnumerable<User> GetUsers(string filterEmail = "", string filterUserName = "")
        {
            var us = _context.Users.Where(u => u.UserName.Contains(filterUserName) || u.Email.Contains(filterEmail));
            return us;
        }

سوالات من:

1- آیا در این معماری و ساختار نیازی به IQueryable هست یا خیر؟

2- بهترین جا برای تعریف و کنترل IQueryable سرویس هست یا ریپوزیتوری؟

3- در کد مربوط به ریپوزیتوری من از && به جای || استفاده کردم و مشکلی که وجود داره این هست که به این متد null ارسال میشه موقع کوئری زدن هم مقدار null را در نطر می گیرد. مگر نباید "" را قرار بدهد؟ مشکل از کجاست؟

  • 1399/04/13
  • ساعت 11:58

سلام 

به معماری مربوط نیست دوست من 

هرجا لازم داشته باشیم کوئری که روی منبعی میزنیم Lazy باشه و در صورت نیاز اجرا بشه از IQueryable استفاده میکنیم 


  • 1399/04/13
  • ساعت 12:19

الان کاری من اینجا انجام دادم درست هست؟

یعنی در ریپوزیتوری لیزی هست و در سرویس هم به صورت IQueryable گرفته شده و در نهایت اجرا شده


  • 1399/04/13
  • ساعت 12:45

بله 


  • 1399/04/13
  • ساعت 12:46

در کد مربوط به ریپوزیتوری من از && به جای || استفاده کردم و مشکلی که وجود داره این هست که به این متد null ارسال میشه موقع کوئری زدن هم مقدار null را در نطر می گیرد. مگر نباید "" را قرار بدهد؟ مشکل از کجاست؟

ممنون میشم این مورد را هم پاسخ بدین


  • 1399/04/13
  • ساعت 13:31

Null قرار دهید 

 


  • 1399/04/13
  • ساعت 14:35

استاد در معماری تمییز کار معقولی هست که در قسمت سرویس هم از دستورات Linq استفاده بشه مثلا whrer ؟


  • 1399/04/13
  • ساعت 14:36

بله 

لایه منطق هست و ممکنه در جایی تصمیم بگیره دیتا رو فیلتر کنه ولی کوئری روی خود بانک نباید بزنه و وظیفه Repository هست


  • 1399/04/13
  • ساعت 14:38

منظورتون این است که در لایه منطق از context استفاده نشه و بقیه دستورات لینک برای فیلترکردن مجاز هستند؟


  • 1399/04/13
  • ساعت 15:17

بله


logo-enamadlogo-samandehi