using static System.Console;
public static void Main()
var listaProcedimento = new []
new Procedimento { CodProcedimento = "Proc 01",},
new Procedimento { CodProcedimento = "Proc 02" },
new Procedimento { CodProcedimento = "Proc 03" },
new Procedimento { CodProcedimento = "Proc 04" },
var listaRlProcedimentoRegistro = new []
new RlProcedimentoRegistro { CodProcedimento = "Proc 01", Registro = "01" },
new RlProcedimentoRegistro { CodProcedimento = "Proc 02", Registro = "02" },
(from procedimento in listaProcedimento
join rlProcedimentoRegistro in listaRlProcedimentoRegistro
on procedimento.CodProcedimento equals rlProcedimentoRegistro.CodProcedimento
into rlProcedimentoRegistro
from procRegistro in rlProcedimentoRegistro.DefaultIfEmpty()
where (procRegistro == null || procRegistro.Registro == "01")
orderby procedimento.NomeProcedimento
select new ProcedimentoCompleto
CodProcedimento = procedimento.CodProcedimento,
TpSexo = procedimento.TpSexo,
Registro = procRegistro?.Registro ?? "Nulo"
WriteLine($"{r.CodProcedimento} - {r.Registro}");
public class Procedimento
public string CodProcedimento { get; set; }
public string NomeProcedimento { get; set; }
public string TpSexo { get; set; }
public int IdadeMinima { get; set; }
public int IdadeMaxima { get; set; }
public string CodCbo { get; set; }
public class RlProcedimentoRegistro
public string CodProcedimento { get; set; }
public string Registro { get; set; }
public class ProcedimentoCompleto
public string CodProcedimento { get; set; }
public string NomeProcedimento { get; set; }
public string TpSexo { get; set; }
public int IdadeMinima { get; set; }
public int IdadeMaxima { get; set; }
public string CodCbo { get; set; }
public string Registro { get; set; }