Inquiridor
Linq where

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