محمد کمائی - Telegram : @komayi
محمد کمائی - Telegram : @komayi
خواندن ۱ دقیقه·۳ سال پیش

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

فرض کنید یک جدول داریم به نام CriticalAlarms که لیستی از لاگهای سیستمی را ذخیره میکند و کاربران ادمین این لیست رو مشاهده میکنن ، اگر هر یوزری یکی از این رکوردهای لاگ یا آلارم رو مشاهده کرد باید در جدول دیگری به نام CriticalAlarmViews که جدول دیتیل تیبل اولی است یک رکورد بزنیم که بگیم این یوزر این آلارم رو مشاهده کرده و بعدا دوباره بهش اون آلارم رو نشون ندیم. در واقع میخوایم معادل t-sql دستور not exists رو بنویسم.

تفاوت exists و in در sql server این است که وقتی از in استفاده کنید تمامی اعضای داخل پرانتز in پیمایش میشن ولی اگر از exists استفاده کنید به محض اینکه شرط یا شرطهای داخل پرانتر exists برقرار شد مقدار true برگشت داده میشه و تا انتهای اعضا پیمایش نمیشه. معادل in در ef میشه Contains و معادل exists در ef میشه Any.

حالا میخوایم با EF Core لیستی از آلارم ها یعنی جدول مستر رو از دیتابیس واکشی کنیم که در جدول دیتیل رکورد نداشته باشن: (آلارمهای مشاهده نشده)

await appDbContext.CriticalAlarms .Where(a => !a.CriticalAlarmViews.Any(v => v.CriticalAlarmId == a.Id)) .ToListAsync();

https://stackoverflow.com/a/71108419/9875486


ef core
C# , .net core & angular & blazor , sql server
شاید از این پست‌ها خوشتان بیاید