簡體   English   中英

如何使用 Entity Framework 和 .NET 5.0 構建查詢以在相關表中查找不匹配的實體?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM