Nello script #648 abbiamo visto come configurare EF per supportare il tipo HierarchyId di Sql Server e come inserire dati in una tabella che ha colonne di questo tipo. In questo script andiamo avanti con la nostra scoperta di questa funzionalità e vediamo come eseguire una query molto semplice: recuperare i padre di un record. Nello script sopra citato abbiamo creato una albero genealogico e quindi adesso proviamo a recuperare i padre di una persona con la seguente query.
var ancestor = ctx.Halflings .SingleOrDefault(ancestor => ancestor.PathFromPatriarch == ctx.Halflings.Single(descendent => descendent.Name == "Otho").PathFromPatriarch .GetAncestor(1));
La query non è semplicissima da comprendere, quindi la andiamo ad analizzare passo per passo. Partiamo dalla query innestata in SingleOrDefault. In questa query viene recuperata la gerarchia della persona di nome Otho. La gerarchia è la proprietà di tipo HierarchyId e quindi usiamo il suo metodo GetAncestor per recuperare gli avi. Passando 1 come valore al metodo, recuperiamo la gerarchia del padre; se avessimo passato 2, avremmo ottenuto la gerarchia del nonno e così via. A questo punto la query diventa più semplice da capire perchè va a cerecare nella gerarchia il primo record che abbia la gerarchia del padre di Otho.
Come si intuisce anche dalla spiegazione, scrivere query che coinvolgono gli HierarchyId non è banale, ma se usassimo l'approccio di avere per ogni record solo l'id del record padre, sarebbero molto più complesse. Nei prossimi script vedremo altri tipi di query che è possibile realizzare con lo HierarchyId.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Gestire gli accessi con Token su Azure Container Registry
Creare una libreria CSS universale: Cards
Introduzione ai web component HTML
Generare velocemente pagine CRUD in Blazor con QuickGrid
Utilizzare Copilot con Azure Cosmos DB
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
Gestione file Javascript in Blazor con .NET 9
Ottenere un token di accesso per una GitHub App
Cancellare una run di un workflow di GitHub
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Disabilitare automaticamente un workflow di GitHub (parte 2)