2009-08-12 5 views
0

j'ai deux tables (1: N)traduire procédure stockée - à Linq2SQL (nombre, max, groupe, orderby)

CREATE TABLE master (idMaster int identity (1,1) not null, 
TheName varchar(100) null, 
constraint pk_master primary key(idMaster) clustered) 

et -

CREATE TABLE lnk (idSlave int not null, 
idMaster int not null, 
constraint pk_lnk_master_slave(idSlave) primary key clustered) 
lien entre

Master.idMaster et lnk.idMaster

J'ai une requête SQL:

select max (master.idMaster) as idMaster, 
     master.theName, 
     count (lnk.idSlave) as freq 
    from lnk 
    inner join master ON lnk.idMaster = master.idMaster 
    Group by master.theName 
    order by freq desc, master.theName 

Je dois traduire cette requête T-SQL en une instruction Linq-to-SQL, de préférence en C#

Répondre

0

Vous ne pouvez pas contrôler la sortie sql exacte d'une requête Linq-to-SQL, mais cela devrait faire l'affaire:

var results = from slave in dataContext.lnks 
        group slave by slave.idMaster 
         into slaveByMaster 
         let count = slaveByMaster.Count() 
         orderby count 
         select new 
         { 
          slaveByMaster.Key, 
          count, 
         }; 

Vous auriez quand même besoin d'une autre requête pour calculer le maximum (master.idMaster). Quelque chose comme ceci:

  var result2 = (from master in dataContext.masters 
         select master.idMaster).Max(); 
Questions connexes