2012-11-14 138 views
7

我该怎么做query使用LINQ and LAMBDAMultiple Select and Join with LINQ and 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

为什么需要它要用lambda来完成?该版本看起来绝对不好理解。 – Arran

+0

可以没有拉姆达。这是因为我想更好地理解lambda如何与之合作。 –

+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

是的,非常感谢。但它如何使用lambda表达式工作? –

5

你是一个名为San_Negocio领域内隐藏San_Proposta,因此调用a.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

谢谢!顺便说一下。这是真正的LINQ。不是其他的东西。 – ppumkin

相关问题