Как выбрать свойства объекта на основе условия? - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть это select:

 var CP = db.ContasPagar.Include(c => c.ContasPagarP).Where(c => c.Quitado == true && c.Caixa == false && c.BancoId == id).Select(c => new BancoList
        {
            Id = c.Id,
            Data = c.DataPagamento,
            Valor = c.Total,
            Tipo = "D",
            Documento = "Fat. Contas Diversas " + c.ContasPagarP.Codigo,

        }).ToList();
        var FP = db.FaturaContasPagar.Include(c => c.FaturaContasPagarP).Where(c => c.Quitado == true && c.Caixa == false && c.BancoId == id).Select(c => new BancoList
        {
            Id = c.Id,
            Data = c.DataPagamento,
            Valor = c.Total,
            Tipo = "D",
            Documento = "Fat. Nota Fiscal: " + c.FaturaContasPagarP.NotaFiscal,
        }).ToList();
        var CR = db.ContasReceber.Include(c => c.ContasReceberP).Where(c => c.Quitado == true && c.Caixa == false && c.BancoId == id).Select(c => new BancoList
        {
            Id = c.Id,
            Data = c.DataPagamento,
            Valor = c.Total,
            Tipo = "C",
            Documento = "Fat. Contas Diversas " + c.ContasReceberP.Codigo,
        }).ToList();
        var FR = db.FaturaContasReceber.Include(c => c.FaturaContasReceberP).Where(c => c.Quitado == true && c.Caixa == false && c.BancoId == id).Select(c => new BancoList
        {
            Id = c.Id,
            Data = c.DataPagamento,
            Valor = c.Total,
            Tipo = "C",
            Documento = c.FaturaContasReceberP.NotaFiscal != null ? "Fat. NFSe: " + c.FaturaContasReceberP.NotaFiscal : null + c.FaturaContasReceberP.NotaFiscalProdutos != null ? " NFe: " + c.FaturaContasReceberP.NotaFiscalProdutos : null,
        }).ToList();
        var BC = db.BancoMovimento.Where(c => c.Credito == true && c.ContaId == id).Select(c => new BancoList
        {
            Id = c.Id,
            Data = c.DataMovimento,
            Valor = c.Valor,
            Tipo = "C",
            Documento = c.Historico
        }).ToList();
        var BD = db.BancoMovimento.Where(c => c.Credito == false && c.ContaId == id).Select(c => new BancoList
        {
            Id = c.Id,
            Data = c.DataMovimento,
            Valor = c.Valor,
            Tipo = "D",
            Documento = c.Historico
        }).ToList();

        var union = CP.Union(FP).Union(FR).Union(CR).Union(BC).Union(BD).OrderBy(c => c.Data).ToList();

Только проблема возникает, не всегда заполнено Nfse, и не всегда заполнено NotaFiscalProdutos, мне нужно проверить этозначения, добавляемые в Documento.

Если бы только поле NumeroNfse имело значение, выглядело бы так: Fat. NFSe: " + c.FaturaContasReceberP.NFSe.NumeroNfse и, если только NotaFiscalProdutos retorar " NFe: " + c.FaturaContasReceberP.NotaFiscalProdutos, и если оба возвращаютдва.

РЕДАКТИРОВАТЬ

Documento = (c.FaturaContasReceberP.NotaFiscal != null ? "Fat. NFSe: " + c.FaturaContasReceberP.NotaFiscal : null + c.FaturaContasReceberP.NotaFiscalProdutos != null ? " NFe: " + c.FaturaContasReceberP.NotaFiscalProdutos : null).Trim()

Я перешел на эту форму, но также не работает, как ожидалось.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2019

Это будет длинное утверждение, если вы введете его в Select, и оно значительно повлияет на читабельность вашего кода.Вот один из способов обойти это ...

В вашей сущности, которая принадлежит FaturaContasReceber, создайте свойство только для чтения, которое выглядит следующим образом:

public string Documento
{
    get
    {
        string nfse = FaturaContasReceberP?.NFSe?.NumeroNfse;
        string nfe = FaturaContasReceberP?.NotaFiscalProdutos;
        string documento = (nfse ? $"Fat. NFSe: {nfse}" : "") +
                           (nfe ? $" NFe: {nfe}" : "");
        return documento.Trim();
    }
}

Тогда вы можете легкоиспользуйте это так:

var FR = db.FaturaContasReceber
                .Include(c => c.FaturaContasReceberP)
                .Where(c => c.Quitado && !c.Caixa && c.BancoId == id)
                .ToList()
                .Select(c => new BancoList
                {
                    Id = c.Id,
                    Data = c.DataPagamento,
                    Valor = c.Total,
                    Tipo = "C",
                    Documento = c.Documento
                }).ToList();

Редактировать:

Если вы настаиваете на этом в Select, вы можете сделать это так:

Documento = (c.FaturaContasReceberP?.NFSe?.NumeroNfse ? "Fat. NFSe: " + c.FaturaContasReceberP.NFSe.NumeroNfse : "" +
             c.FaturaContasReceberP?.NotaFiscalProdutos ? " NFe: " + c.FaturaContasReceberP.NotaFiscalProdutos : "").Trim()

Но я бы посоветовал вам использовать первое решение.

1 голос
/ 03 апреля 2019

Вы можете использовать оператор ?:

    Tipo = "C",
Documento = c.FaturaContasReceberP.NFSe != null ? "Fat. NFSe: " + c.FaturaContasReceberP.NFSe.NumeroNfse:null + c.FaturaContasReceberP.NotaFiscalProdutos!=null? " NFe: " + c.FaturaContasReceberP.NotaFiscalProdutos:null,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...