Domanda

Qualcuno può aiuto nel convertire il seguente SQL per LINQ in C #?

select s.SYSTEM_NAME,
       r.RESET_CODE,
       COUNT(v.reset_code) 
  from (select distinct system_name 
          from tbl) s 
cross join (select distinct reset_code 
              from tbl) r 
left join tbl v on v.SYSTEM_NAME = s.SYSTEM_NAME 
               and v.RESET_CODE=r.RESET_CODE 
 group by s.SYSTEM_NAME,r.RESET_CODE 
È stato utile?

Soluzione

Croce si unisce sono generalmente rappresentati come multipla da clausole in un'espressione di query, o una chiamata a SelectMany nella sintassi metodo di estensione.

Quindi, la prima parte della query potrebbe essere:

var query = from systemName in db.Table.Select(x => x.SystemName).Distinct()
            from resetCode in db.Table.Select(x => x.ResetCode).Distinct()
            ...

esterno sinistro entra a far parte di solito sono rappresentati con una "join ... in ..." domanda, forse in questo modo:

var query = from systemName in db.Table.Select(x => x.SystemName).Distinct()
            from resetCode in db.Table.Select(x => x.ResetCode).Distinct()
            join tmp in db.Table on 
                new { ResetCode = resetCode, SystemName = systemName } 
                equals new { tmp.ResetCode, tmp.SystemName }
                into tmpGroup
            select new { ResetCode = resetCode,
                         SystemName = systemName,
                         Count = tmpGroup.Count() };

Non sono sicuro circa la parte Conte, a dire il vero ... Io non sono al 100% sicuro che cosa il COUNT(v.ResetCode) fa nel vostro SQL originale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top