2010-04-14 5 views
4

Je suis en train de convertir l'instruction SQL suivante dans une expression LINQConvertir SQL à l'expression LINQ avec le comte

SELECT COUNT(ID) AS Count, MyCode 
FROM  dbo.Archive 
WHERE  DateSent>[email protected] AND DateSent<[email protected] 
GROUP BY MyCode 

et j'ai essayé de suivre cette page à titre d'exemple:
Converting SQL containing top, count, group and order to LINQ (2 Entities)

I a obtenu ce à ce jour mais je suis coincé sur la compréhension de la nouvelle partie

var res = (from p in db.Archives 
      where (p.DateSent>= dateStartMonth) && (p.DateSent< dateToday) 
      group p by p.MyCode into g 
      select new { ??????MyCode = g.something?, MonthlyCount= g.Count() }); 

Merci à l'avance pour aider


MISE À JOUR:
pouvez-vous expliquer ce que g.Key est? Je ne comprends pas d'où vient cette variable ou de quoi elle fait référence? Je veux dire que si je groupais sur 4 choses différentes? Comment pourrais-je me référer à chacun?

var res = from archive in db.Archives 
     where archive.DateSent >= dateStartMonth && 
      archive.DateSent < dateToday 
     group archive by archive.MyCode, archive.Extra into archiveGrp 
     select new 
     { 
      MyCode = archiveGrp.Key, 
      Extra = archiveGrp.??? 
      MonthlyCount = archiveGrp.Count() 
     }; 

Répondre

6

La déclaration LINQ ci-dessous devrait fonctionner:

var res = from archive in db.Archives 
      where archive.DateSent >= dateStartMonth && 
       archive.DateSent < dateToday 
      group archive by archive.MyCode into archiveGrp 
      select new 
      { 
       MyCode = archiveGrp.Key, 
       MonthlyCount = archiveGrp.Count() 
      }; 

Notez que le Key property contiendra la valeur de la propriété que vous groupez sur, dans ce cas MyCode.

0
from p in archive 
where p.DateSent >= dateStartMonth && p.DateSent < dateToday 
group p by p.MyCode into g 
select new { Count = g.Count(), MyCode = g.Key } 

produit la même sortie que Sql dans LINQPad