[英]How do I contruct a query to find unmatched entities in related table with Entity Framework and .NET 5.0?
我正在使用 .NET (Core?) 5.0 和 Entity Framework 以及使用 Pomelo 驅動程序的 MySQL 8.0 數據庫。 在 .NET Core 3.1 和 MySQL 5.7 的先前版本中,我能夠創建查詢或 lambda 表達式來查找一個表中的所有記錄,這些記錄在給定用戶的另一個相關表中沒有相應記錄。 這是以前工作的方法:
public int GetUnacknowledgedAlarmEventsCount(string name, ApplicationUser user)
{
int count = 0;
if (name != null && user != null)
{
count = (from ae in AlarmEvents
where ae.Alarm.Name.StartsWith(name) && !ae.Acks.Any(a => a.UserId == user.Id)
select ae).Count();
}
return count;
}
此查詢背后的表結構簡化為:
Alarms
------
Id
Name
AlarmEvents
-----------
Id
AlarmId
AlarmEventAcks
--------------
Id
AlarmEventId
UserId
Users
-----
Id
我希望基於名稱的關系是顯而易見的。 無論如何,我正在嘗試確定給定用戶尚未確認哪些警報事件。 我知道我可以在多個步驟中執行此操作,並且性能會受到很大影響,但我希望將所有工作都放在數據庫查詢上,就像在以前的版本中一樣。 不知道為什么它不像以前那樣工作,除了延遲加載不像以前的版本默認那樣啟動。
我嘗試更改此查詢以使用包含如下所示的 Lambda 表達式,但這也不起作用:
public int GetUnacknowledgedAlarmEventsCount(string station, ApplicationUser user)
{
int count = 0;
if (station != null && user != null)
{
count = AlarmEvents.Include(a => a.Alarm).Include(a => a.Acks).Where(a => a.Alarm.Name.StartsWith(station)).Where(a => !a.Acks.Any(a => a.UserId == user.Id)).Count();
}
return count;
}
因此,我一直在試圖找出構建此查詢的最佳方法,以處理最新版本的 .NET 對實體框架的更改。 任何人有任何建議或幫助? 謝謝。
在更新所有內容以確保所有內容與當前版本的驅動程序同步后,它現在可以使用原始查詢再次運行。 我討厭升級穩定的工作代碼以使用更新版本的技術和 API。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.