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