#c# #entity-framework #asp.net-core
#c# #entity-framework #asp.net-core
Вопрос:
У меня есть это select
:
var CP = db.ContasPagar.Include(c => c.ContasPagarP).Where(c => c.Quitado == true amp;amp; c.Caixa == false amp;amp; 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 amp;amp; c.Caixa == false amp;amp; 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 amp;amp; c.Caixa == false amp;amp; 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 amp;amp; c.Caixa == false amp;amp; 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 amp;amp; 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 amp;amp; 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()
Я перешел на эту форму, но также работает не так, как ожидалось.
Комментарии:
1. Поделитесь с нами своим текущим кодом для
FR
и существующими записями в базе данных, текущим результатом дляFR
.
Ответ №1:
Это было бы длинным утверждением, если бы вы поместили его в 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 amp;amp; !c.Caixa amp;amp; 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. В случае, если документ находится в таблице, которую я заполняю в BancoList, но он возвращает множество ошибок, когда я пытаюсь обойти эту форму. Помня, что я использую это, чтобы объединить выбранные в BancoList элементы. Таким образом, это не решит проблему, потому что это правило предназначено только для этого выбора.
2. @marianac_costa Я не уверен, что понимаю; не могли бы вы, пожалуйста, пояснить? Но сначала попробуйте обновленный код; Я исправил некоторые опечатки.
3. По-прежнему работает не так, как ожидалось. Я не могу изменить свойство, потому что я заполняю его другой таблицей и их объединением.
4. Обработка должна быть прямо здесь
Documento = c.Documento
5. @marianac_costa Вам не нужно изменять какие-либо существующие свойства; вы просто добавите новое свойство, доступное только для чтения, как я показал выше. Я решил назвать это
Documento
но вы можете назвать это как угодно. Затем вы можете использоватьDocument = c.YourPropertyName
. Что именно у вас не работает?
Ответ №2:
Вы можете использовать ?:оператор
Tipo = "C",
Documento = c.FaturaContasReceberP.NFSe != null ? "Fat. NFSe: " c.FaturaContasReceberP.NFSe.NumeroNfse:null c.FaturaContasReceberP.NotaFiscalProdutos!=null? " NFe: " c.FaturaContasReceberP.NotaFiscalProdutos:null,
Комментарии:
1. Как не работает, отображается только
NFSe
, даже если он равен null