簡體   English   中英

EF Linq 包括最后

[英]EF Linq include last

我有兩張表,一張是城市,另一張是城市的溫度/日期值,一個城市可以有多個溫度日期。

我怎么能通過EF + linq 帶來城市+每個城市的最近溫度

類似: _context.city.include(x=> x.temperature().last());

您可以通過在Select表達式中將城市和最后一個溫度投影到新的 object 來實現這一點。 您在問題中包含的代碼片段缺少幾個步驟,因此我將猜測您的數據結構:

await _context.Cities.Select(city => new
{
    City = city,
    LastTemperature = city.Temperatures
                         .OrderByDescending(t => t.DateRecorded)
                         .FirstOrDefault(),
}).ToListAsync();

您始終應該通過按所選屬性對它們進行排序來控制“最后”的溫度。 這樣做,在Include中使用Take(1)是有意義的,例如獲取最新的:

_context.Cities
    .Include(x=> x.Temperatures.OrderByDescending(t => t.Date).Take(1));

從 EF core 5 開始支持過濾/排序的Include

由於您已經在嘗試這些方面的東西,我假設您正在使用 EFC 5 或 6。

我不喜歡過濾包含,因為它會導致歧義(過濾包含的 nav 屬性被認為loaded ,因此結果的用戶必須了解可能封裝的行為)。 我更喜歡投影到新的/匿名類型:

_context.TemperatureReading
    .GroupBy( tr => tr.City )
    .Select( g => new
    {
        City = g.Key,
        LatestTemp = g.OrderByDescending( t => t.Date ).First(),
    } );

暫無
暫無

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

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