Sélectionnez une seule colonne dans LINQ
La EntityModel est défini comme:
Personnel a un lien vers un Pays
Lors de l'exécution de ce code dans LinqPad, je vois que le SQL généré n'est pas optimisé (tous les champs sont retournés) dans la première requête ? Ce qui me manque ici ou faire du tort ?
Requête 1 LINQ
var Country = Countries.FirstOrDefault(o => o.Id == 100000581);
var personnelIds = Country.Personnels.Select(p => p.Id).ToArray();
personnelIds.Dump();
Requête 1 SQL
exec sp_executesql N'SELECT [t0].[Id], [t0].[Version], [t0].[Identifier], [t0].[Name], , [t0].[UpdatedBy] FROM [Personnel] AS [t0] WHERE [t0].[Country_Id] = @p0',N'@p0 bigint',@p0=100000581
Requête 2 LINQ
var Country = Countries.FirstOrDefault(o => o.Id == 100000581);
var personnelIds2 = Personnels.Where(p => p.Country == Country).Select(p => p.Id).ToArray();
personnelIds2.Dump();
Requête 2 SQL
exec sp_executesql N'SELECT [t0].[Id] FROM [Personnel] AS [t0] WHERE [t0].[Country_Id] = @p0',N'@p0 bigint',@p0=100000581
La base de données utilisée est SQL Express 2008. Et LinqPad version est 4.43.06
Vous devez vous connecter pour publier un commentaire.
Essayer ça, ça devrait être mieux.
Personnels de la collection sera remplie par le chargement paresseux lors de l'accès, d'où la récupération de tous les champs de la DB. Voici ce qui se passe...
Vous voulez quelque chose de plus comme ceci:
OU:
Puis obtenir le tableau des Id si non null
Essayer pouvez également essayer de regrouper le personnel en une seule requête
Avez-vous le ForeignKey explicitement définis dans votre POCO pour le Personnel? Il est courant de laisser EF, mais en ajoutant qu'il serait massivement simplifier ce code et le SQL: