Je me bats avec Linq, donc c'est une question boiteuse mais quand même … J'ai un tableau avec 4 colonnes suivantes
Pid SKU colorid sizeid 1 'A65102' 38 2 2 'A65102' 38 4 3 'A65102' 38 18
Je dois connaître le nombre de colors et d'options de taille disponibles pour cela.
En sql, je l'habitude de le faire par:
select count(distinct [sizeid]) ,count(distinct [colors]) from [item_master] where sku = 'A65102'
Mais à Linq, je peux get toutes les valeurs par
var dd = (from im in db.item_masters where im.sku.Contains("A65102") select new {im.sizeid,im.colors });
Mais comment puis-je get le nombre de valeurs distinctes pour les deux en requête unique?
Vous pouvez utiliser GroupBy
:
var distinctCounts = db.item_masters.GroupBy(im => im.sku) .Where(grp => grp.Key == "A65102") .Select(grp => new { CntSizes = grp.Select(im => im.sizeid).Distinct().Count(), CntColors = grp.Select(im => im.colorid).Distinct().Count() });
Vous pouvez utiliser la requête que vous avez en tant que source de données pour récupérer ces données (particulièrement utile si vous souhaitez également l'utiliser pour d'autres choses):
var dd = (from im in db.item_masters where im.sku == "A65102" select new {im.sizeid, im.colors}).ToList(); var numDistinctSizes = dd.Select(x => x.sizeid).Distinct().Count(); var numDistinctColors = dd.Select(x => x.colors).Distinct().Count();