اجرا نشدن شرط ها در IQeryable

Alimilad

عضویت : 1397/06/04 پرسش ها : 2 پاسخ ها : 5

اجرا نشدن شرط ها در IQeryable

ارسال شده در : ‫۹ ماه قبل، شنبه ۱۷ فروردین ۱۳۹۸، ساعت ۱۶:۲۶

سلام مهندس
در استفاده از IQeryable ها به جز .tolist که اخر باید بزاریم تا کد اجرا بشه نکته دیگه هم هست؟ من متد زیر رو نوشتم ولی هیچ کدوم از where ها کار نمیکنه.یعنی تمام لیست رو در هر صورت بهم برمیگردونه

        public List<CourseListViewModel> GetCourseLists(int take = 0, int currentPage = 1, string filter = ""
            , string type = "all", string orderBy = "createDate", int minPrice = 0, int maxPrice = 0, List<int> selectedGroups = null)
        {
            if (take == 0)
                take = 8;

            IQueryable<Course> courses = _context.Courses;

            if (!string.IsNullOrEmpty(filter))
            {
                courses.Where(c => c.CourseTitle.Contains(filter));
                //courses.Where(c => EF.Functions.Like(c.CourseTitle, $"%{filter}%"));
            }
            switch (type)
            {
                case "all":
                    break;
                case "purchasable":
                    {
                        courses.Where(c => c.CoursePrice != 0);
                        break;
                    }
                case "free":
                    {
                        courses.Where(c => c.CoursePrice == 0);
                        break;
                    }
            }

            switch (orderBy)
            {
                case "createDate":
                    {
                        courses.OrderBy(c => c.CreateDate);
                        break;
                    }
                case "updateDate":
                    {
                        courses.OrderBy(c => c.UpdateDate);
                        break;
                    }
            }

            if (minPrice > 0)
            {
                courses.Where(c => c.CoursePrice > minPrice);
            }

            if (maxPrice > 0)
            {
                courses.Where(c => c.CoursePrice < maxPrice);
            }

            if (selectedGroups != null && selectedGroups.Any())
            {
                foreach (var item in selectedGroups)
                {
                    courses.Where(c => c.GroupId == item || c.SubGroupId == item);
                }
            }

            int skip = (currentPage - 1) * take;

            return courses.Include(c => c.CourseEpisodes).Select(c => new CourseListViewModel()
            {
                CourseId = c.CourseId,
                CourseImageName = c.CourseImageName,
                CoursePrice = c.CoursePrice,
                CourseTitle = c.CourseTitle,
                CourseTime = new TimeSpan(c.CourseEpisodes.Sum(r => r.EpisodeTime.Ticks))
            }).Skip(skip).Take(take).ToList();
        }

 

ایمان مدائنی

عضویت : 1396/09/10 پرسش ها : 5 پاسخ ها : 8998

(پاسخ صحیح)

ارسال شده در :‫۹ ماه قبل، شنبه ۱۷ فروردین ۱۳۹۸، ساعت ۱۷:۵۹

کد من رو ببینید شما = نداشتید 

0 تشکر

ایمان مدائنی

عضویت : 1396/09/10 پرسش ها : 5 پاسخ ها : 8998
ارسال شده در :‫۹ ماه قبل، شنبه ۱۷ فروردین ۱۳۹۸، ساعت ۱۷:۴۲

سلام 

خب کارش همیشه Lazy هست و تا صداش نزنید اجرا نمیشه 

برای همین .ToList میزاریم

0 تشکر

Alimilad

عضویت : 1397/06/04 پرسش ها : 2 پاسخ ها : 5
ارسال شده در :‫۹ ماه قبل، شنبه ۱۷ فروردین ۱۳۹۸، ساعت ۱۷:۴۴

خوب الان تو لیست گذاشتم ولی خروجیش ثابت

0 تشکر

ایمان مدائنی

عضویت : 1396/09/10 پرسش ها : 5 پاسخ ها : 8998
ارسال شده در :‫۹ ماه قبل، شنبه ۱۷ فروردین ۱۳۹۸، ساعت ۱۷:۴۵
   foreach (var item in selectedGroups)
                {
                   courses = courses.Where(c => c.GroupId == item || c.SubGroupId == item);
                }

 

0 تشکر

Alimilad

عضویت : 1397/06/04 پرسش ها : 2 پاسخ ها : 5
ارسال شده در :‫۹ ماه قبل، شنبه ۱۷ فروردین ۱۳۹۸، ساعت ۱۷:۵۵

ببخشید مهندس ولی متوجه نشدم .کجا رو دارم اشتباه میکنم .هیچ کدوم از where ها اجرا نمیشن در نتیجه تمام جدول کورس رو برمیگردونه. 

0 تشکر

Alimilad

عضویت : 1397/06/04 پرسش ها : 2 پاسخ ها : 5
ارسال شده در :‫۹ ماه قبل، شنبه ۱۷ فروردین ۱۳۹۸، ساعت ۱۸:۰۱

مرسی خیلی اشتباه بیخودی کردم :) 

0 تشکر

محسن هرمزی

عضویت : 1396/09/20 پرسش ها : 6 پاسخ ها : 12
ارسال شده در :‫۹ ماه قبل، چهار شنبه ۲۱ فروردین ۱۳۹۸، ساعت ۰۷:۵۳

سلام

برای اینکه شرط هاتون اجرا بشن باید اینکار رو انجام بدین

public List<CourseListViewModel> GetCourseLists(int take = 0, int currentPage = 1, string filter = ""
            , string type = "all", string orderBy = "createDate", int minPrice = 0, int maxPrice = 0, List<int> selectedGroups = null)
        {
            if (take == 0)
                take = 8;

            IQueryable<Course> courses = _context.Courses;

            if (!string.IsNullOrEmpty(filter))
            {
               courses = courses.Where(c => c.CourseTitle.Contains(filter));
                //courses.Where(c => EF.Functions.Like(c.CourseTitle, $"%{filter}%"));
            }
            switch (type)
            {
                case "all":
                    break;
                case "purchasable":
                    {
                        courses = courses.Where(c => c.CoursePrice != 0);
                        break;
                    }
                case "free":
                    {
                        courses = courses.Where(c => c.CoursePrice == 0);
                        break;
                    }
            }

            switch (orderBy)
            {
                case "createDate":
                    {
                        courses = courses.OrderBy(c => c.CreateDate);
                        break;
                    }
                case "updateDate":
                    {
                       courses =  courses.OrderBy(c => c.UpdateDate);
                        break;
                    }
            }

            if (minPrice > 0)
            {
               courses =  courses.Where(c => c.CoursePrice > minPrice);
            }

            if (maxPrice > 0)
            {
               courses =  courses.Where(c => c.CoursePrice < maxPrice);
            }

            if (selectedGroups != null && selectedGroups.Any())
            {
                foreach (var item in selectedGroups)
                {
                    courses = courses.Where(c => c.GroupId == item || c.SubGroupId == item);
                }
            }

            int skip = (currentPage - 1) * take;

            return courses.Include(c => c.CourseEpisodes).Select(c => new CourseListViewModel()
            {
                CourseId = c.CourseId,
                CourseImageName = c.CourseImageName,
                CoursePrice = c.CoursePrice,
                CourseTitle = c.CourseTitle,
                CourseTime = new TimeSpan(c.CourseEpisodes.Sum(r => r.EpisodeTime.Ticks))
            }).Skip(skip).Take(take).ToList();
        }

 

0 تشکر

برای ارسال پاسخ باید وارد شوید و یا در سایت عضو شوید