Tagi zapytań
Tagi zapytań pomagają skorelować zapytania LINQ w kodzie z wygenerowanymi zapytaniami SQL przechwyconymi w dziennikach.
Dodawać adnotacje do zapytania LINQ przy użyciu nowej TagWith()
metody:
Napiwek
Przykład z tego artykułu można zobaczyć w witrynie GitHub.
var myLocation = new Point(1, 2);
var nearestPeople = (from f in context.People.TagWith("This is my spatial query!")
orderby f.Location.Distance(myLocation) descending
select f).Take(5).ToList();
To zapytanie LINQ jest tłumaczone na następującą instrukcję SQL:
-- This is my spatial query!
SELECT TOP(@__p_1) [p].[Id], [p].[Location]
FROM [People] AS [p]
ORDER BY [p].[Location].STDistance(@__myLocation_0) DESC
Można wywołać TagWith()
wiele razy w tym samym zapytaniu.
Tagi zapytań są skumulowane.
Na przykład, biorąc pod uwagę następujące metody:
private static IQueryable<Person> GetNearestPeople(SpatialContext context, Point myLocation)
=> from f in context.People.TagWith("GetNearestPeople")
orderby f.Location.Distance(myLocation) descending
select f;
private static IQueryable<T> Limit<T>(IQueryable<T> source, int limit) => source.TagWith("Limit").Take(limit);
Następujące zapytanie:
var results = Limit(GetNearestPeople(context, new Point(1, 2)), 25).ToList();
Przekłada się na:
-- GetNearestPeople
-- Limit
SELECT TOP(@__p_1) [p].[Id], [p].[Location]
FROM [People] AS [p]
ORDER BY [p].[Location].STDistance(@__myLocation_0) DESC
Można również używać ciągów wielowierszowych jako tagów zapytań. Przykład:
var results = Limit(GetNearestPeople(context, new Point(1, 2)), 25).TagWith(
@"This is a multi-line
string").ToList();
Tworzy następujący kod SQL:
-- GetNearestPeople
-- Limit
-- This is a multi-line
-- string
SELECT TOP(@__p_1) [p].[Id], [p].[Location]
FROM [People] AS [p]
ORDER BY [p].[Location].STDistance(@__myLocation_0) DESC
Znane ograniczenia
Tagi zapytań nie są parametryzowalne: program EF Core zawsze traktuje tagi zapytań w zapytaniu LINQ jako literały ciągu zawarte w wygenerowanym języku SQL. Skompilowane zapytania, które przyjmują tagi zapytania jako parametry, nie są dozwolone.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla