Comment utiliser les INCLURE dans Linq pour les colonnes sélectionnées uniquement?
Je vais avoir le scénario avec plusieurs linq inclure des méthodes avec l'objet de la table des associations.
Supposons que le scénario est:
User has Groups
User has Permissions
User has Vehicles
var _users=
(from u in dbconetxt.Users
join g in dbconetxt.Gropus on u.userId equals g.userId
join p in dbconetxt.Permissions on u.userId equals p.userId
join v in dbconetxt.Vehicles on u.userId equals v.userId
Where u.Status=true
select u).Include(u.Groups)
.Include(u.Permissions)
.Include(u.Vehicles)
.ToList()
Après avoir rejoint l'ensemble de ces tables à l'intérieur d'une seule requête, je sélectionne l'Objet Utilisateur. Certainement, je voudrais obtenir la Liste, mais je veux que chaque Objet Utilisateur doit Inclure ses Groupes respectifs, les Autorisations, les Véhicules, mais à partir de Véhicules et les Autorisations, je veux charger seulement quelques Colonnes/Propriétés, pas tous. Alors, comment puis-je spécifier les Colonnes à charge dans ce scénario?
Je suis en utilisant Entity Framework 4.1 + C# + SQL Server.
À partir de v4 Entity Framework prend en charge le chargement paresseux. Voir: thedatafarm.com/blog/data-access/a-look-at-lazy-loading-in-ef4
Je ne parle pas des paresseux du chargement d'une classe entière, EF a toujours soutenu que la. Je parle chargement différé pour une ou plusieurs propriétés sur une classe tout désireux de chargement d'autres propriétés, qui semble être ce qu'Rouge Cygne demande.
C'est vrai
OriginalL'auteur Red Swan | 2012-01-27
Vous devez vous connecter pour publier un commentaire.
Est une méthode d'extension attaché à IQueryable. Cela signifie que vous devez l'utiliser sur le DbSet Utilisateurs.
Si vous souhaitez sélectionner uniquement les colonnes spécifiées, vous pouvez créer un type anonyme ou d'une classe avec un constructeur sans paramètre.
ou
veuillez expliquer ce que vous entendez.
Quel est le but de l'inclure dans ces requêtes? Btw. inclure ne fonctionne pas une fois que vous commencez à l'aide de projection.
opps!!!... Je suis d'accord pour utiliser annonymouse les classes, mais je me suis limité à ajouter dans l'architecture en conséquence. Dans votre répondu cas, je dois ajouter mes classes personnalisées comme une anonnymous classes. donc je ne peux pas vous suivre approche de maintenant. toute autre façon, vous savez ?
OriginalL'auteur Kralizek
Si vous souhaitez sous-ensemble de colonnes, vous devez utiliser la projection d'anonymes ou de type personnalisé ou créer de base de données spécifique pour votre requête et de l'associer à nouveau en lecture seule entité.
Include
sera toujours en charge de toutes les colonnes de l'entité (donc autre approche est de diviser l'entité avec table de fendage, mais qui ressemble à overkill). AussiInclude
a très peu d'utilisation - forme de la racine de la requête ne doit pas changer donc, une fois que vous utilisez l'un custom projection ou rejoindreInclude
ne fonctionnera pas.EF est ORM - une fois que vous avez la carte entité vous sera toujours travailler avec toute entité qui n'est pas seulement une de ses parties. Si vous avez besoin de travailler avec une partie de l'entité, vous devez utiliser la projection de non classe d'entité (non cartographié).
OriginalL'auteur Ladislav Mrnka