SQL alla conversione LINQ con croce si uniscono
-
12-10-2019 - |
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
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