2010-12-08 8 views
0

je dois convertir ci-dessous requête SQL dans une requête LinqConvertir une requête SQL dans une Linq à l'instruction SQL

select * 
from bancos 
where codigobanco in 
    (select distinct codigobanco 
    from headerarquivo 
    where (MONTH(datahorageracao)=12) and (YEAR(datahorageracao)=2010)) 

Comment pourrais-je faire pour transformer cette requête SQL dans une requête Linq?

Répondre

2

en supposant que datahorageracao est un datetime vous na pas publier les propriétés ou le modèle de domaine, mais voulez-vous voulez est quelque chose comme ceci:

from banco in bancos 
let queryauxiliar = (from arquivo in headerarquivo where (arquivo.datahorageracao.Month = 12) && arquivo.datahorageracao.Year = 2010 select arquivo.codigobanco) 
where queryauxiliar.Any((val)=>banco.codigobanco == val.codigobanco) 
select new Banco() 
{ 
    NomeProp = banco.valor 
} 
+0

Je l'ai LINQ à l'entité \t var bancos = (de ha ouroDB.HeaderArquivoes \t \t \t \t \t .Lorsque (h => h.DataHoraGeracao.Month == dtpGeracao.Value.Month) \t \t \t \t \t .Where (h => == h.DataHoraGeracao.Year dtpGeracao.Value.Year) \t \t \t \t de bc dans ouroDB.Bancos \t \t \t \t. Où (b => b.CodigoBanco.Contains (ha.CodigoBanco)) \t \t \t \t \t sélectionnez bc) .Distinct(). OrderBy (b => b.NomeBanco); – Ederaldo

1

En supposant datahorageracao est de type DateTime.Two différentes façons dont vous pouvez écrire du code LINQ en utilisant d'abord lambda expressions et seconde en utilisant la syntaxe query expression fonctionne de toute façon -

//Lambda Expression way get distinct codigobanco... 
var codigobancolist =Context.headerarquivo.Where(c=>c.datahorageracao.Month ==12 && c.datahorageracao.Year==2010).Select(c=>c.codigobanco).Distinct(); 

//Query Expression way to get actual data... 
    var data= from b in bancos 
       where b.codigobanco.Contains(codigobancolist) 
       select b; 
0
var banco = from c in bancos 
      where headerarquivos 
        .Select(o => o.codibanco) 
        .Where(o.MONTH(datahorageracao)=12) and (o.YEAR(datahorageracao)=2010)) 
        .Contains(c.codibanco) 
      select c; 

assez sûr que devrait faire i t.

+1

Vous devez déplacer 'Select (o => o.codibanco)' une ligne vers le bas –

+0

@Albin merci, je m'en souviendrai à l'avenir – guildsbounty