0 votes

Récupérer des tables à clés étrangères avec LINQ et LINQ to SQL

J'ai une table de base de données appelée MenuItem (MenuItemID, ParentMenuItemID, MenuItemName). Je veux l'utiliser pour alimenter un contrôle de menu (probablement le contrôle de menu .NET).

Chaque élément de menu a un parent. S'il n'y a pas de parent, il s'agit d'un élément de menu de niveau supérieur. J'ai créé une classe LINQ to SQL mappée à la table MenuItem. Comme ma table a une clé étrangère à elle-même de ParentMenuItemID à MenuItemID, ma classe MenuItem générée automatiquement contient une collection de MenuItem. Cette collection doit contenir tous les enfants d'un élément de menu.

Le résultat doit être stocké dans une liste.

Est-il possible de récupérer en une seule requête :

  • tous les éléments du menu de niveau supérieur
  • tous les enfants des éléments de menu de niveau supérieur rassemblés sous leurs objets parents

Il ne devrait pas y avoir de problème pour récupérer les éléments de menu de niveau supérieur, puis les itérer et interroger chaque enfant, ou récupérer tous les éléments de menu, puis les placer dans le bon parent. Mais si cela pouvait être fait en une seule requête... Je serais heureux :)

0voto

Alexander Taran Points 3907

Si votre modèle Linq to Sql a une propriété de navigation pour lui-même alors :

dataContext.MenuItem
.Where(m=>m.ParentMenuItemId==null)
.Select(m=> new {TopLevelItem = m,Children = m.Children})

Sinon, vous pouvez remplacer m.Children par dataContext.MenuItem.Where(c=>c.ParentMenuItemId==m.MenuItemId)

0voto

Devart Points 52715

Vous pouvez essayer d'utiliser la méthode DataLoadOptions.LoadWith.
Toutefois, ce scénario n'est pas pris en charge par Microsoft LINQ to SQL Server, mais uniquement par les implémentations Devart pour Oracle, MySQL, PostgreSQL et SQLite.
L'équipe Devart
http://www.devart.com/dotconnect
Fournisseurs de données ADO.NET pour Oracle, MySQL, PostgreSQL, SQLite avec Support d'Entity Framework et de LINQ to SQL

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X