مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

ali.majed

عضویت از 1394/09/15

واکشی داده های منحصر به فرد با توجه به یک ویژگی با استفاده از Entity Framework

  • جمعه 13 اردیبهشت 1398
  • 20:32
تشکر میکنم

بنده می خوام رکورد هایی رو از پایگاه داده واکشی کنم، اما اگر چند رکورد برای یک فیلد مقادیر یکسان داشتند، تنها یکی از رکورد ها برگردونده بشود (تفاوتی ندارد کدام رکورد). مثلا

با توجه به عکس

با توجه به عکس، رکورد های 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 در تصویر، تنها یکی از آنها برگردانده شود.

پاسخ های این پرسش

تعداد پاسخ ها : 4 پاسخ
کاربر سایت

AmirGhasemi

عضویت از 1392/02/25

  • شنبه 14 اردیبهشت 1398
  • 08:40

سلام

والا بنده که چند باری تاپیک شما را خواندم و اصلا متوجه سوالتون نشدم!!! مشکل کجاست؟!؟!

سایر دوستان اگر سوال را متوجه شدند پاسخگو باشند لطفا

کاربر سایت

ali.majed

عضویت از 1394/09/15

  • شنبه 14 اردیبهشت 1398
  • 09:02

توضیحات رو روی عکس گفتم. مشکل آن جا هست که رکورد های 2 و 3 مقدار یکسان 65 برای فیلد CurrentTurnID دارند و بنده می خواهم از میان این دو رکورد تنها یکی از آنها برگردانده شود (تفاوتی ندارد کدام یک) مثلا بگویم آن که مقدار Type کمتری دارد. مشل از آن جا ناشی می شود که در برنامه ی بنده اگر یک بیمار برای یک خدمت از دو روش یا بیشتر پرداخت نماید، مثلا 50 درصد را نقدی پرداخت کند و 50 درصد دیگر را با کارت بانکی، هنگام گزارش گیری قیمت خدمت دو برابر حساب میشود (فیلد ServicePayment) و بنده باید یکی از این رکورد ها را نگه دارم.

دنبال کدی مانند DistinctBy و یا مانند این هستم.

کاربر سایت

AmirGhasemi

عضویت از 1392/02/25

  • شنبه 14 اردیبهشت 1398
  • 17:36

سلام

خب در EF  هم شما می تونی از Distinct استفاده کنی ویک جنریک پاس بدهی

کاربر سایت

noorifar

عضویت از 1395/11/22

  • جمعه 11 مرداد 1398
  • 10:58

قسمت آخر دستورت که میخوای Select رو اعمال کنی

Select(s => s.ServicePayment).DefaultIfEmpty(0)

باید بجای استفاده از DefaultIfEmpty از عبارت First استفاده کنی تا اولیش برگرده و دیگه به تکراریهای بعدی کاری نداشته باشه

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)