• 1400/03/22
  • 0
  • 284
1400/03/22 |
backend

خطا در اجرای دستور Group By برای گرفتن برخی داده های آماری از یک جدول با داده انبوه و قرار دادن نتایج در جدول دوم

جناب باباپی با سلام و تشکر بابت پاسخ به سوال قبل بنده

همانطور که در عنوان نیز توضیح دادم ، 2 جدول دارم:

1 - "Leaves" با 21000 رکورد مرخصی برای 50 نفر در طول 20 سال

2- "StatisticLeave" که اکنون خالی است ،

قصد دارم با استفاده از داده های  جدول 1  پس از انجام برخی محاسبات (مانند جمع و ...) خلاصه نتایج را در جدول دوم قرار دهم که خالی است . برای اینکار قطعه کد زیر را نوشتم:


        public ActionResult UserStatistic(Int32? PCode)
        {
            //PCode = 8520;
            var ST = new List<StatisticLeave>();
            var resuls = db.Leaves.GroupBy(p => p.Pcode);
            foreach (var Pcode in resuls)
            {
                var statistic = new StatisticLeave();
                //var result2 = db.Leaves.GroupBy(p =>p.HijriYear);
                foreach (var item in Pcode)
                { 
                    var used = UsedLeaves(item.Pcode);
                    var estelaji = db.Leaves.Where(p => p.DLT == Leave.DLType.Estelaji).Sum(p => p.LeaveDays); 
                    var bh = db.Leaves.Where(p => p.DLT == Leave.DLType.Bihoghoogh).Sum(p => p.LeaveDays);                 
                    statistic.Yearlyhours = ViewBag.mins/60;
                    statistic.YearlyDays = ViewBag.days;
                    statistic.YearEstelaji = estelaji;
                    statistic.YearBihoghoogh = bh;
                    statistic.Pcode = item.Pcode;
                    statistic.Year = item.HijriYear;
                    statistic.UsedYearLaeve = (used / 60) / 8;
                    ST.Add(statistic);
                }
                db.StatisticLeave.AddRange(ST);
            }
            db.SaveChanges();
            return View();
        }

قصد دارم داده ها را بر اساس کد اشخاص گروه بندی و سپس به تفکیک سالها آمار را استخراج و برای هر سال یک رکورد ثبت کنم ولی با trace مشخص شد هنگام رسیدن به دستور GroupBy خطای زیر رخ می دهد:

"System.InvalidOperationException HResult=0x80131509 Message=Unable to translate the given 'GroupBy' pattern. Call 'AsEnumerable' before 'GroupBy' to evaluate it client-side."


سلام

یک راهنمایی کلی میکنم

زمان استفاده از group by باید قبل از آن از دستور شرط where استفاده کنید 

اگر بخواهید بعد از group by از شرطها استفاده کنید باید از having by استفاده کنید

این در ساختار sql وجود دارد و شما در ef دنبال این موضوع باشید


با سلام و تشکر

متاسفانه همه راهها را رفتم ولی باز همون خطا

کد را بفرم زیر هم قبلا تست کرده بودم

 var results = db.Leaves.Where(p=>p.Pcode == 8520).GroupBy(p => p.HijriYear);


public ActionResult UserStatistic(Int32? PCode)
        {
            //PCode = 8520;
            var ST = new List<StatisticLeave>();
            var resuls = db.Leaves.GroupBy(p => p.Pcode).Select(b => b).ToList();
            foreach (var Pcode in resuls)
            {
                var statistic = new StatisticLeave();
                //var result2 = db.Leaves.GroupBy(p =>p.HijriYear).Select(b => b).ToList();
                foreach (var item in Pcode)
                { 
                    var used = UsedLeaves(item.Pcode);
                    var estelaji = db.Leaves.Where(p => p.DLT == Leave.DLType.Estelaji).Sum(p => p.LeaveDays); 
                    var bh = db.Leaves.Where(p => p.DLT == Leave.DLType.Bihoghoogh).Sum(p => p.LeaveDays);                 
                    statistic.Yearlyhours = ViewBag.mins/60;
                    statistic.YearlyDays = ViewBag.days;
                    statistic.YearEstelaji = estelaji;
                    statistic.YearBihoghoogh = bh;
                    statistic.Pcode = item.Pcode;
                    statistic.Year = item.HijriYear;
                    statistic.UsedYearLaeve = (used / 60) / 8;
                    ST.Add(statistic);
                }
                db.StatisticLeave.AddRange(ST);
            }
            db.SaveChanges();
            return View();
        }

 


با تشکر از پاسخ شما

قبلا tolist   و toarray را هم امتحان کردم جواب نداد


کد رو با lookup  نوشتم مشکل حل شد



پاسخی برای این باگ ارسال کنید

لطفا کدها را درون قطعه کد ارسال نمایید

برای ارسال پاسخ باید وارد حساب کاربری خود شوید
ورود به حساب کاربری