بنده می خوام رکورد هایی رو از پایگاه داده واکشی کنم، اما اگر چند رکورد برای یک فیلد مقادیر یکسان داشتند، تنها یکی از رکورد ها برگردونده بشود (تفاوتی ندارد کدام رکورد). مثلا
با توجه به عکس، رکورد های 2 و 3 دارای مقدار برابر برای ستون CurrentTurnID هستند. بنابر این یکی از این رکرود ها را برگردانم و دیگری را نادیده بگیرم.
کد های بنده:
int services = Convert.ToInt32(database.Tbl_CurrentTurn.AsNoTracking() .Join(database.Tbl_pay.AsNoTracking(), f => f.CurrentTurnID, s => s.CurrentTurnID, (f, s) => new { f.CurrentTurnOfficialID, f.CurrentTurnID, f.SickID, f.Remove, f.Payment, f.ServicePayment, s.isDeposit }) .Where(w => w.SickID == SickId && w.Remove != true && w.Payment == true && w.isDeposit != true) .Select(s => s.ServicePayment).DefaultIfEmpty(0).Sum());
در این قطعه کد بنده دو جدول را join میکنم و پس از اعمال شروط لازم، مقدار ستون ServicePayment را جمع میکنم. باید یک شرطی اعمال کنم که از میان رکورد های 2 و 3 در تصویر، تنها یکی از آنها برگردانده شود.
سلام
والا بنده که چند باری تاپیک شما را خواندم و اصلا متوجه سوالتون نشدم!!! مشکل کجاست؟!؟!
سایر دوستان اگر سوال را متوجه شدند پاسخگو باشند لطفا
توضیحات رو روی عکس گفتم. مشکل آن جا هست که رکورد های 2 و 3 مقدار یکسان 65 برای فیلد CurrentTurnID دارند و بنده می خواهم از میان این دو رکورد تنها یکی از آنها برگردانده شود (تفاوتی ندارد کدام یک) مثلا بگویم آن که مقدار Type کمتری دارد. مشل از آن جا ناشی می شود که در برنامه ی بنده اگر یک بیمار برای یک خدمت از دو روش یا بیشتر پرداخت نماید، مثلا 50 درصد را نقدی پرداخت کند و 50 درصد دیگر را با کارت بانکی، هنگام گزارش گیری قیمت خدمت دو برابر حساب میشود (فیلد ServicePayment) و بنده باید یکی از این رکورد ها را نگه دارم.
دنبال کدی مانند DistinctBy و یا مانند این هستم.
سلام
خب در EF هم شما می تونی از Distinct استفاده کنی ویک جنریک پاس بدهی
قسمت آخر دستورت که میخوای Select رو اعمال کنی
Select(s => s.ServicePayment).DefaultIfEmpty(0)
باید بجای استفاده از DefaultIfEmpty از عبارت First استفاده کنی تا اولیش برگرده و دیگه به تکراریهای بعدی کاری نداشته باشه
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)