LEFT Outer Join does not work in LINQ when 0 is the reference? only null

2

I'm having doubts on Left Outer Join, I'm using MVC 5 C #, Net 4.5.2.

I have the Next Model Supplier

 public class fechamentoFornecedor
    {
        public int FornecedorId { get; set; }
        public int Tipo { get; set; }
        public string FornecedorNome { get; set; }
        public bool IsEntrada { get; set; }
        public virtual ICollection<fechamentoMovimentacao> Movimentacoes { get; set; }
    }

And the Model Drive

  public class fechamentoMovimentacao
    {
        public int MovimentacaoId { get; set; }
        public int FornecedorId { get; set; }
        public byte Tipo { get; set; }
        public string Texto { get; set; }
        public DateTime Data { get; set; }
        public decimal Valor { get; set; }
        public bool IsEntrada { get; set; }

        public virtual fechamentoFornecedor Fornecedor { get; set; }
}

Initially for my logic I tried to do:

 public virtual fechamentoFornecedor? Fornecedor

To try to show that it could be Null , it did not work.

Then I tried to do the Linq

var Linq = (from Movimentacao in db.fechamentoMovimentacoes
                       join Fornecedor in db.fechamentoFornecedores
                       on Movimentacao.FornecedorId equals Fornecedor.FornecedorId into output
                       from Fornecedor in output.DefaultIfEmpty()
                       where Movimentacao.Data.Year == hoje.Year && Movimentacao.Data.Month == MesNumber &&  Movimentacao.IsEntrada == IsEntrada
                       orderby Movimentacao.MovimentacaoId descending
                       select new MovimentacaoDataTable
                       {
                           MovimentacaoId = Movimentacao.MovimentacaoId,
                           Data = Movimentacao.Data,
                           Tipo = Movimentacao.Tipo,
                           FornecedorNome = Fornecedor !=null ? Fornecedor.FornecedorNome : "",
                           Texto = Movimentacao.Texto,
                           Valor = Movimentacao.Valor
                       });

So I understood the main thing here:

from Fornecedor in output.DefaultIfEmpty()

This query does not generate Errors, but does not return results when it has no relation in Provider ( on Movimentacao.FornecedorId equals Fornecedor.FornecedorId )

In Movimentacao.FornecedorId , When it does not have values (relation to Vendor), I enter value 0 instead of null would this be the problem? p>     

asked by anonymous 26.02.2016 / 15:09

1 answer

1

Your template does not allow Fornecedor to be null. It would need to look like this:

public class fechamentoMovimentacao
{
    public int MovimentacaoId { get; set; }
    public int? FornecedorId { get; set; } // Aqui precisa ser Nullable.
    public byte Tipo { get; set; }
    public string Texto { get; set; }
    public DateTime Data { get; set; }
    public decimal Valor { get; set; }
    public bool IsEntrada { get; set; }

    public virtual fechamentoFornecedor Fornecedor { get; set; }
}
    
25.08.2016 / 20:40