Comment countr plus d'une colonne distincte dans linq à sql?

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();