2012-11-14 17 views
7

Jak mogę to zrobić query używając LINQ and LAMBDA?Wiele Wybierz i dołącz za pomocą LINQ i Lambda

ZAPYTANIE

Select san_negocio.imovel_id 
     ,san_negocio.negocio_id 
     ,san_imovel.credenciada_id 
     ,san_proposta.proposta_id 
     ,san_proposta.credenciada_id 
    from san_negocio 
    join san_proposta 
    on san_negocio.imovel_id = san_proposta.imovel_id 
    join san_imovel 
    on san_negocio.imovel_id = san_imovel.imovel_id 
where san_negocio.credenciadacaptadora_id is null 
    and san_negocio.credenciadavendedora_id is null 
    and san_proposta.statusproposta_id = 2 

Próbowałem:

var objetos = db.San_Negocio.Join(db.San_Proposta, a => a.Imovel_Id, b => b.Imovel_Id, (a, b) => new { San_Negocio = a, San_Proposta = b })     
    .Join(db.San_Imovel, a => a.San_Negocio.Imovel_Id, c => c.Imovel_Id, (a, c) => new { San_Negocio = a, San_Imovel = c }) 
    .Where(a => a.San_Negocio.San_Negocio.CredenciadaCaptadora_Id == null && a.San_Negocio.San_Negocio.CredenciadaVendedora_Id == null) 
    .Select(a => new { a.San_Negocio.San_Negocio.Negocio_Id, 
      a.San_Negocio.San_Negocio.Imovel_Id, 
      a.San_Imovel.Credenciada_Id }); 

Moje wątpliwości jest w moim Select. Jak mogę połączyć się z moją tabelą San_Proposta?

+0

Dlaczego potrzebujemy zrobić za pomocą lambda? Ta wersja wygląda absolutnie okropnie, aby to zrozumieć. – Arran

+0

Może być bez lambda. To dlatego, że chciałbym lepiej zrozumieć, jak działa lambda z tym. –

+0

Myślę, że może być lepiej, jeśli po raz pierwszy przeczytać niektóre próbki o linq code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b#nested, a następnie zdecydować, którą metodę chcesz użyć –

Odpowiedz

4

Oto właściwa oświadczenie LINQ:

from neg in db.san_negocio 
join prop in san_proposta 
    on neg.imovel.id equals prop.imovel_id 
join imo in san_imovel 
    on neg.imovel_id = imo.imovel_id 
where neg.credenciadacaptadora_id == null && 
    neg.credenciadavendedora_id == null && 
    prop.statusproposta_id == 2 
select new { 
    ImovelID = neg.imovel_id, 
    NegocioID = neg.negocio_id, 
    Imo_CredenciadaID = imo.credenciada_id, 
    PropostaID = prop.proposta_id 
    Prop_CredenciadaID = prop.credenciada_id 
}; 

To stworzy IQueryable anonimowych obiektów z wymienionych powyżej właściwości.

+0

Tak, wielkie dzięki. Ale jak to działa, używając wyrażenia lambda? –

5

ukrywasz San_Proposta w polu o nazwie San_Negocio, więc nazywając a.San_Negocio.San_Proposta będzie do niego dostęp, ale polecam pisanie łączy w taki sposób, że pola nie są zagnieżdżone, tak:

var objetos = db.San_Negocio 
    .Join(db.San_Proposta, 
      a => a.Imovel_Id, 
      b => b.Imovel_Id, 
      (a, b) => new { San_Negocio = a, San_Proposta = b })     
    .Join(db.San_Imovel, 
      a => a.San_Negocio.Imovel_Id, 
      c => c.Imovel_Id, 
      (a, c) => new { a.San_Negocio, a.San_Proposta, San_Imovel = c }) 
    .Where(a => a.San_Negocio.CredenciadaCaptadora_Id == null && 
       a.San_Negocio.CredenciadaVendedora_Id == null) 
    .Select(a => new 
       { 
        a.San_Negocio.Negocio_Id, 
        a.San_Negocio.Imovel_Id, 
        a.San_Proposta.San_Proposta_Id, 
        a.San_Imovel.Credenciada_Id 
       }); 
+1

Dziękuję !! A przy okazji. TO JEST PRAWDZIWE LINQ. Nie to inne rzeczy. – ppumkin

Powiązane problemy