مشکل در جمع ستون های sql به وسیله دستور linq درون سی شارپ
سلام دوستان
من یه جدول دارم که بدهکار و بستانکار درونش ثبت میکنم
وبعد وقتی کاربر میخواد ویرایش کنه با پروسیجر به شکل زیر جدول رو آپدیت میکنم
db.up_sanad_item(txt_title.Text.Trim(), Convert.ToInt64(txt_bedehkar.Text.Trim()), Convert.ToInt64(txt_bestankar.Text.Trim()),mid); db.SaveChanges()
که ردیف mid رو آپدیت میکنه
و بعداز اینکه ذخیره شد میخوام جمع ستون بدهکار و بستانکار رو بگیرم و با دستور زیر میگیرم
long sum_bedehkar = Convert.ToInt64(db.Sanad_Item.Where(c => c.sanadID == mid).ToList().Sum(c => c.Bedehkar)); long sum_bestankar = Convert.ToInt64(db.Sanad_Item.Where(h => h.sanadID == mid).ToList().Sum(h => h.Bestankar));
بار اول که دستور اجرا میشه کامل و درست اجرا میکنه و جمع ستون ها رو میگیره
ولی برای بار دوم و دفعات بعد که اجرا میشه و trace میکنم،دستور پروسیجر اول که مربوط به آپدیت جدول هست،کارمیکنه و درون جدول ثبت میکنه،ولی دو دستور بعدی که برای گرفتن جمع دو ستون هست درست کار نمیکنه، مقادیر جمع قبلی رو برمیگردونه یعنی فقط یکبار این دستور درست اجرا میشه ولی دفعات بعد درست کار نمیکنه
برای مثال درون بدکار 800 و بستانکار 1000 داریم
وقتی کاربر ویرایش میکنه و مقدار 800 رو به هزار عوض میکنه ، اطلاعات به درستی درون جدول اضافه میشه و و جمع این ستون ها هم به درستی برمیگرده(بدهکار=1000،بستانکار=1000) ولی برای بار بعدی که کاربر مقادیر رو عوض میکنه و مثلا 1200 و 800 میده،بازم اطلاعات ثبت میشه ولی جمع ستون ها دوباره 1000 و 1000 برمیگرده
درصورتی که باید 1200 و 800 برگرده
نمیدونم اشکال کارم کجاست
دوستان خواهشا یه راهنمایی کنید
ممنونم
2 پاسخ
اولا که ToList. نکنید موقع sum!! همون sum کافیه. ایطوری اطلاعات اضافی میگیرید.
دوما دستورتون درسته، شاید شرط where اشتباهه، یا قبل از ذخیره شدن اطلاعات دارید Sum میگیرید.
نه شرطم درسته و دستورات linq بعد از دستور آپدیت میادو بعد از ذخیره سازی اقدام به گرفتن اطلاعات میکنم
دستور اول که اجرا شد و قبل اینکه برنامه بره سراغ دستور linq از جدول درون sql یه select میگیرم و تمام اطلاعات به درستی درونش درج شده و بعد که ادامه اجرا رو میرم جمع بدهکار و بستانکار دفعه اول رو میاره
اگه شرط اشتباه باشه باید همون دفعه اول هم اطلاعات اشتباه بیاره
درصورتی که دفعه اول درست میاره و دفعات بعدی همون جواب همون دفعه اول رو برمیگردونه