Cela peut en effet être fait de telle sorte qu'il en résulte une seule requête SQL en dessous.
Si vous effectuez la sous-sélection comme vous l'avez écrit dans Entity Framework, la requête Linq devient une requête SQL unique.
var q = from chicken in data.chickens
where chicken.photographer_nr == nr && chicken.Lang == lang
select new
{
chicken.photographer,
chicken.Code,
chicken.Title,
Photo = (from cp in data.chicken_photos
where cp.chicken == chicken.Code
orderby cp.Sort
select cp.Photograph_Nr).FirstOrDefault()
};
Si vos tables ont primaire approprié et des relations clés étrangères, et les associations de navigation appropriées dans Entity Framework, vous pouvez également obtenir les mêmes résultats de cette façon:
var q = from chicken in data.chickens
where chicken.photographer_nr == nr && chicken.Lang == lang
select new
{
chicken.photographer,
chicken.Code,
chicken.Title,
Photo = c.chicken_photos.Select(cp => cp.Photograph_Nr).FirstOrDefault()
};
Et enfin, pour rester complètement cohérente et utiliser uniquement les expressions lambda-:
var q = data.chickens
.Where(c => chicken.photographer_nr == nr && chicken.Lang == lang)
.Select(c => new
{
c.photographer,
c.Code,
c.Title,
Photo = c.chicken_photos.Select(cp => cp.Photograph_Nr).FirstOrDefault()
}
);
Je préfère se fondant sur la navigation de l'entité, car elle oblige le développeur à créer un bon de navigation ssociations dans Entity Framework et les relations de clés étrangères correctes dans la base de données. Cela entraînera presque toujours un SQL optimisé en dessous.
Ce n'est pas toujours au développeur de savoir comment la base de données est structurée, alors vous devrez peut-être suivre la première approche et écrire la sous-sélection vous-même.
site de célibataires de poulet? –
En fait, c'est pour les producteurs de poulet de faire des croisements de, donc je suppose, oui. – hreinn1000