簡體   English   中英

如何檢索帶有相關實體子集的實體?

[英]How to retrieve entities with a subset of related entities?

我有一對多關系中的兩個實體:儀表(1)->(n)閱讀

我相信我的兩個實體已正確設置以提供該關系,因此假設這一點。

我希望檢索具有相關讀數的儀表,但是由於每個儀表可能有很多讀數,因此我希望通過例如Reading.Date來限制它。 另一個選擇是每米最多讀取X個讀數。

如何在EF.Core中做到這一點?

我認為錯過的另一個答案是,您要的是相關實體的子集 ,而不是相關實體的整個集合。

如果要對提取的相關實體保持選擇性,則不能僅依靠Include語句(或隱式延遲加載),因為它們被設置為加載所有相關實體。

沒有選擇性的Include 但是您可以Select一個包容性的Select

DateTime filterDate = DateTime.Now;

var myData = db.Meters
               .Select(m => new 
                            { 
                                Meter = m, 
                                Readings = m.Readings.Where(r => r.Date == filterDate)
                            })
               .ToList();

備注

  • 我使用了匿名類型,但是您當然也可以使用具體的DTO類。
  • Where(r => r.Date == filterDate)可以改進(檢查Date組件或范圍),這只是一個簡單的示例。 您可以在此處使用所需的任何過濾條件。
  • 注意,您不需要為此Include語句。 Select (在尚未枚舉的IQueryable )不需要顯式的Include因為Select本身已經知道您要獲取的數據。
  • 我建議不要將相關實體的子集放在meter.Readings 這將導致對於此列表是子集還是完整集的困惑,當您調用SaceChanges()時,EF實際上可能會將其注冊為更改。 Nav道具不應用作具有相同類型但功能含義不同的收藏存儲空間。

如果您的表設計正確,即Meter中的鍵已與Reading映射(請參閱外鍵約束),則EF在訪問其POCO類時會自動提供相關記錄。 確保讀數具有數據庫中儀表表的外鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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