none
Linq where RRS feed

  • Pergunta

  • Preciso fazer uma consulta onde retorne apenas os registros com a chave estrangeira filtrando:

    Tabela1 = id_tb1, funcao

    Tabela2 = id_tb2, descricao, cod_tb1

    Tabela3 = id_tb3, tipo, cod_tb2

    Obs.: cod_tb1 = chave estrangeira Tabela1

             cod_tb2 = chave estrangeira Tabela2

    Tabela1

    id_tb1   funcao

    1          diretor

    2          coordenador

    3          operador

     

    Como fazer um select na Tabela3 que retorne apenas os registros que representam os operadores?

    Eu tentei com o código abaixo,  mas sem sucesso: 

    var lista = (from p in db.Tabela3
                             where p.Tabela2.cod_Tb2==3
                             select p).ToList();
                ViewBag.lista = String.Format("[{0}]", lista);


    • Editado Wilson Boris sexta-feira, 11 de abril de 2014 19:06 erro
    sexta-feira, 11 de abril de 2014 18:48

Todas as Respostas

  • var resultado (
    from tb1 in Tabela1
    join tb2 in Tabela2 on tb1.id_tb1 equals tb2.cod_tb1
    join tb3 in Tabela3 on tb2.id_tb2 equals tb3.cod_tb2
    where tb1.funcao == "operador"
    ).ToList();
    • Sugerido como Resposta Jose Luiz Borges sexta-feira, 11 de abril de 2014 21:19
    • Não Sugerido como Resposta Wilson Boris segunda-feira, 14 de abril de 2014 23:26
    sexta-feira, 11 de abril de 2014 19:51
  • Use duas vezes o JOIN, talvez isso lhe ajude :

     var sql = db.TB1.Join(db.TB2,
                                          e => e.ID,
                                          a => a.ID,
                                          (e, a) => new { e, a })
                                        .Join(db.TB3,
                                          ea => ea.e.ID,
                                          tb3 => tb3.ID,
                                          (ea, tb3) => new { ea, tb3 })
                                        .Where(w => w.ea.e.ID == 5)
                                        .Select(s => new {/*seuscampos*/})
                                        .ToList();
                   
                                        
    
    
                  
                                        
    

    sexta-feira, 11 de abril de 2014 19:54
  • Abaixo meu código, mas sem sucesso. 

    Na linha "var lista = db.OJ_Prod_AARH.AsQueryable();" eu tentei a implementação, mas sem sucesso:

            public ActionResult GridDataBasic(GridSettings gridSettings)
            {
                string ID, DATA_NASC, NOMEPAC, SINAN, DATA_CONTATO;
    
    
                int tamanho = db.OJ_Prod_AARH.Count();
    
                // ORDENAR
                //if (gridSettings.SortColumn == "Nome Paciente")
                //    return (gridSettings.SortOrder == "desc") ? db.OJ_Prod_AARH.OrderByDescending(c => c.Ag_Soc_PF.nome_Completo) : db.OJ_Prod_AARH.OrderBy(c => c.Ag_Soc_PF.nome_Completo);
    
                List<Object> returnData = new List<Object>();
                IQueryable<OJ_Prod_AARH> a;
    
         var lista = db.OJ_Prod_AARH.AsQueryable();
    
    
    //       var lista = db.Ag_Pol_C_Adm_Cat_PF.Join(db.Ag_Soc_PF,
    //          e => e.id,
    //          f => f.id,
    //          (e, f) => new { e, f })
    //          .Join(db.OJ_Prod_AARH,
    //          ef => ef.e.id,
    //          OJ_Prod_AARH => OJ_Prod_AARH.id,
    //          (ef, OJ_Prod_AARH) => new { ef, OJ_Prod_AARH })
    //          .Where(w => w.ef.e.id == 2)
    //          .Select(s => new {/***/})
    //          .AsQueryable();
    //
    
              //var lista (from tb1 in db.Ag_Pol_C_Adm_Cat_PF
              //           join tb2 in db.Ag_Soc_PF on tb1.id equals tb2.cod_Cat_PF 
              //           join tb3 in db.OJ_Prod_AARH on tb2.id equals tb3.cod_PF                     
              //where tb1.id == 1).ToList();
                           
    
    
    
    
    
    
             if (gridSettings.IsSearch)
             {
                 lista = gridSettings.Where.rules.Aggregate(lista, BuscaNome);
           
             }
           
              
                foreach (var item in lista.OrderBy(c => c.Ag_Soc_PF.nome_Completo).Skip((gridSettings.PageIndex - 1) * gridSettings.PageSize).Take(gridSettings.PageSize))
              {
                  ID = item.id.ToString();
                  if (item.Ag_Soc_PF.data_Nasc != null)
                  {
                      DATA_NASC = item.Ag_Soc_PF.data_Nasc.Value.ToShortDateString();
                  }
                  else
                  {
                      DATA_NASC = null;
                  }
           
                  NOMEPAC = item.Ag_Soc_PF.nome_Completo;
                  SINAN = item.num_SINAN.ToString();
           
                  if (item.data_Contato != null)
                  {
                      DATA_CONTATO = item.data_Contato.Value.ToShortDateString();
                  }
                  else
                  {
                      DATA_CONTATO = null;
                  }
           
                  returnData.Add(new { id = ID, cell = new string[] { NOMEPAC, DATA_NASC, SINAN, DATA_CONTATO } });
              }
    
                var result = new { total = tamanho / gridSettings.PageSize + 1, page = gridSettings.PageIndex, records = tamanho, rows = returnData };
                return Json(result, JsonRequestBehavior.AllowGet);
            }

    sábado, 12 de abril de 2014 18:11
  • domingo, 13 de abril de 2014 12:20