2012-11-14 14 views
7

どうすればよいですかqueryLINQ and LAMBDAを使用していますか?LINQとLambdaを複数選択して結合する

QUERY

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 

私が試してみた:

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 }); 

私の疑問は、私Selectです。 San_Propostaテーブルはどのようにして呼び出すことができますか?ここで

+0

すると、なぜそれが必要ありませんラムダを使って行うのですか?そのバージョンは理解するのが大変恐ろしいものです。 – Arran

+0

ラムダなしでもかまいません。これはラムダがどのように動作するかをよりよく理解したいからです。 –

+0

linq code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b#nestedについていくつかのサンプルを読んでから、使用する方法を決めたら –

答えて

4

は、適切な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 
}; 

これは、上記の特性を持つ匿名オブジェクトののIQueryableを作成します。

+0

の方がいいかもしれません。ありがとうございます。しかし、どのようにラムダ式を使用して動作しますか? –

5

あなたはそうa.San_Negocio.San_Propostaを呼び出すと、それをアクセスする、San_Negocioと呼ばれるフィールド内San_Propostaを隠しているが、私はこのように、あなたはフィールドが入れ子になっていないような方法で参加する書き込みをお勧めします:

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

ありがとうございました!ところで。これは本当のリンチです。他のものではありません。 – ppumkin

関連する問題