2014-07-18 5 views
1

J'ai une requête ci-dessous dans SQL. J'ai essayé d'utiliser différentes options dans linq pour obtenir le résultat correspondant exact de SQL à mon code du Centre, voici mon code utilisant linq.LINQ: Grouper par colonnes multiples avec Maximum pour une colonne

Mais je n'ai pas réussi.

requête SQL est (ce qui donne un résultat correct)

Select prdCode, Max(prdID) from products 
    GROUP BY prdCode 
    order by prdCode 

Essayé ci-dessous dans LINQ

from prd in Entities.Products 
    where prd.prdEnabled == true 
    group prd by new { prd.prdCode, prd.prdID } into gcs 
    select new { prdID = gcs.Key.prdID, prdCode = gcs.Key.prdCode } 

Merci à l'avance.

+0

Cet extrait de code est-il supposé être une tentative de conversion du code SQL en code Linq? Si oui, pourquoi la requête LINQ filtre-t-elle les produits par leur propriété 'prdEnabled', et le SQL ne le fait pas? Ils ne semblent pas être du tout équivalents – dcastro

Répondre

2
from prd in Entities.Products 
where prd.prdEnabled == true 
group prd by prd.prdCode into gcs 
orderby gcs.Key 
select new { prdCode = gcs.Key, prdID= gcs.Max(g => g.prdID) } 
0

Cela doit correspondre à votre requête SQL

Entities.Producs.Where(prod=> prod.prdEnabled) 
       .GroupBy(prod => prod.prdCode) 
       .Select(group => new{ prdCode = group.Key, prdID = group.Max(prod => prod.prdID) }) 
       .OrderBy(x => x.prdCode); 
  1. Filtrer les produits par leur prdEnabled propriété
  2. Groupe produits par leur code
  3. Pour chaque groupe, sélectionnez le code et la ID maximum
  4. Trier par code
Questions connexes