I have the following query in SQL
:
select
e.idEstado, e.txtNomeEstado, e.txtSiglaEstado,
c.idCidade, c.txtNomeCidade,
de.txtH1, de.txtTitulo, de.txtDescricaoEstado, de.txtDescription
from tbDescricaoEstado de
left join tbCidade c on de.idCidade = c.idCidade
left join tbEstado e on de.idEstado = e.idEstado
And I'm trying to do the same query with lambda
, but I'm having trouble accessing the tbCidade
fields when making SelectMany . What I am trying is the following (incomplete because I can not see the fields of tbCidade
):
DescricaoEstadoECidade DescricaoEstadoECidade = bd.tbDescricaoEstado
.GroupJoin(bd.tbCidade, de => de.idCidade, c => c.idCidade, (de, c) => new { De = de, C = c.DefaultIfEmpty() })
.GroupJoin(bd.tbEstado, c => c.De.idEstado, e => e.idEstado, (c, e) => new { C = c, E = e.DefaultIfEmpty() })
.SelectMany(final => final.E,
(final, e) => new
{ idEstado = e.idEstado, txtNomeEstado = e.txtNomeEstado, txtSiglaEstado = e.txtSiglaEstado
idCidade = final.C.C.?
})
.toList();
Could anyone help me?
@EDIT
I can do it, as in the following, but it does not look very good. Could someone present a better way?
var DescricoesEstadosECidades = bd.tbDescricaoEstado
.GroupJoin(bd.tbCidade, de => de.idCidade, c => c.idCidade, (de, c) => new { De = de, C = c.DefaultIfEmpty() })
.SelectMany(final => final.C,
(final, c) => new
{
idCidade = c.idCidade,
txtNomeCidade = c.txtNomeCidade,
txtH1 = final.De.txtH1,
txtTitulo = final.De.txtTitulo,
txtDescricaoEstado = final.De.txtDescricaoEstado,
txtDescription = final.De.txtDescricaoEstado,
idEstado = final.De.idEstado
}
)
.GroupJoin(bd.tbEstado, de => de.idEstado, e => e.idEstado, (de, e) => new { De = de, E = e.DefaultIfEmpty() })
.SelectMany(final => final.E,
(final, e) => new
{
idEstado = e.idEstado,
txtNomeEstado = e.txtNomeEstado,
txtSiglaEstado = e.txtSiglaEstado,
idCidade = final.De.idCidade,
txtNomeCidade = final.De.txtNomeCidade,
txtH1 = final.De.txtH1,
txtTitulo = final.De.txtTitulo,
txtDescricaoEstado = final.De.txtDescricaoEstado,
txtDescription = final.De.txtDescription
}
)
.ToList();