I have a table that have several field and each of them update separately by separate ViewModel , Now I wanna to get the latest Value of a specific field (maybe it has updated in fifth record of my table) , OK? now what I have write is look like this :
public ViewResult ShowPiece()
{
var context = new SiteContext();
var showPiece = context.Portraits.LastOrDefault();
return View(showPiece);
}
but when I run the application and navigate above action , I got thie Error :
LINQ to Entities does not recognize the method , and this method cannot be translated into a store expression...
what is the problem with that ??
Entity Framework Classic Include The Include method lets you add related entities to the query result. In EF Classic, the Include method no longer returns an IQueryable but instead an IncludeDbQuery that allows you to chain multiple related objects to the query result by using the AlsoInclude and ThenInclude methods.
Using Caching in Entity Framework Core. NCache provides integration for caching in Entity Framework Core through Extension Methods. You can cache the result sets of LINQ queries whether they are for transactional data or reference data.
Once the breakpoint is hit hover over query to expand then click on > Debug View > The dropdown beside the magnifying glass> Text Visualizer. There you have it, the SQL that will be sent to the database. Text Visualizer option showing the query generated by EF Core 5.
Use descending ordering (by date, or id) and FirstOrDefault
which is supported:
var showPiece = context.Portraits
.OrderByDescending(p => p.Date)
.FirstOrDefault();
Another option, is select portrait which has max date (id) via subquery (as Evelie suggested in comments):
var showPiece = context.Portraits
.FirstOrDefault(p => p.Date == context.Portraits.Max(x => x.Date));
I made a little investigation here. In first case (ordering) following query is generated:
SELECT TOP (1) [t0].*
FROM [Portraits] AS [t0]
ORDER BY [t0].[Date] DESC
In second case (getting max):
SELECT TOP (1) [t0].*
FROM [Portraits] AS [t0]
WHERE [t0].[Date] = ((
SELECT MAX([t1].[Date])
FROM [Portraits] AS [t1]
))
Execution plan is almost same, but in second case Top is executed twice. Thus Top costs 0% comparing to Index Scan, this should not be a problem.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With