AJUDA PARA MONTAR QUERY COM LINQ + CONCAT
Estou precisando montar uma query usando LINQ, concatenando duas consultas. Sei que o comando para isso é o CONCAT.
A minha Select é assim:
Select Favorecido.Favorecido_Id, Favorecido.nome, ContaPagar.Favorecido_Id, ContaPagar.Tipodocumento_Id, ContaPagar.Numero,
ContaPagar.Parcela, ContaPagar.ValorDocumento, ContaPagar.Emissao as [dataoperacao], [ô]ENTRADA[ô] as [tipoOperacao]
From (Favorecido Left Join ContaPagar On Favorecido.Favorecido_Id = ContaPagar.Favorecido_Id)
Where ContaPagar.Emissao >= [ô]2015-01-01[ô] And ContaPagar.Emissao <= [ô]2015-12-31[ô]
UNION ALL
Select Favorecido.Favorecido_Id, Favorecido.Nome, ContaPagar.Favorecido_Id, ContaPagar.TipoDocumento_Id, ContaPagar.Numero,
ContaPagar.Parcela, ContaPagar.ValorDocumento, ContaPagar.Pagamento as [dataoperacao], [ô]BAIXA[ô] as [tipoOperacao]
From (Favorecido Left Join ContaPagar On Favorecido.Favorecido_Id = ContaPagar.Favorecido_Id)
Where ContaPagar.Pagamento >= [ô]2015-01-01[ô] And ContaPagar.Emissao <= [ô]2015-12-31[ô]
Onde vou listar todos os movimentos cuja emissão estão no perÃodo definido concatenando com os movimentos cujo pagamento estão no mesmo perÃodo.
Só que eu preciso [Ô]criar[Ô] essa coluna [tipoOperacao] onde vai escrever ENTRADA quando for emissão e BAIXA quando for pagamento.
O mais próximo que eu consegui chegar é isso:
var contas = (from cp in db.ContaPagar
join f in db.Favorecido on cp.Favorecido_Id equals f.Favorecido_Id
join td in db.TipoDocumento on cp.TipoDocumento_Id equals td.TipoDocumento_Id
select new
{
Favorecido = cp.Favorecido.Nome,
cp.Favorecido_Id,
cp.TipoDocumento_Id,
TipoDeDocumento = cp.TipoDocumento.Descricao,
cp.Numero,
cp.Parcela,
cp.ValorDocumento,
cp.Emissao,
})
.Concat
(from cp in db.ContaPagar
join f in db.Favorecido on cp.Favorecido_Id equals f.Favorecido_Id
//join tc in db.TipoConta on cp.TipoConta_Id equals tc.TipoConta_Id
join td in db.TipoDocumento on cp.TipoDocumento_Id equals td.TipoDocumento_Id
select new
{
Favorecido = cp.Favorecido.Nome,
cp.Favorecido_Id,
cp.TipoDocumento_Id,
TipoDeDocumento = cp.TipoDocumento.Descricao,
cp.Numero,
cp.Parcela,
cp.ValorDocumento,
cp.Pagamento
});
Agora falta a parte de [Ô]criar[Ô] esse coluna [tipoOperacao] e atribuir o valor ENTRADA ou BAIXA em cada Select.
Não sei se fui muito claro, mas quem entendeu e puder me ajudar, eu agradeço, e enquanto isso vou tentando, se encontrar a solução, volto para postar.
Até mais.
tenho que acrescentar no primeiro Select: tipoOperacao = [Ô]ENTRADA[Ô]
e no segundo select: tipoOperacao = [Ô]BAIXA[Ô].
Agora me surgiu outro problema: Na minha classe ContaPagar, o campo Pagamento está declarado assim:
public DateTime? Pagamento { get; set; }
porque pode ter registros que ainda não foram pagos, portanto a data estará nula.
Então, quando coloco no segundo select: cp.Pagamento, ocorre um erro no Visual Studio:
Citação:[ô]IQueryable<<anonymous type: string Favorecido, int Favorecido_Id, int TipoDocumento_Id, string TipoDeDocumento, string Numero, string Parcela, string ValorDocumento, DateTime Emissao, string TipoDeOperacao>>[ô] does not contain a definition for [ô]Concat[ô] and the best extension method overload [ô]ParallelEnumerable.Concat<<anonymous type: string Favorecido, int Favorecido_Id, int TipoDocumento_Id, string TipoDeDocumento, string Numero, string Parcela, string ValorDocumento, DateTime? Pagamento, string TipoDeOperacao>>(ParallelQuery<<anonymous type: string Favorecido, int Favorecido_Id, int TipoDocumento_Id, string TipoDeDocumento, string Numero, string Parcela, string ValorDocumento, DateTime? Pagamento, string TipoDeOperacao>>, IEnumerable<<anonymous type: string Favorecido, int Favorecido_Id, int TipoDocumento_Id, string TipoDeDocumento, string Numero, string Parcela, string ValorDocumento, DateTime? Pagamento, string TipoDeOperacao>>)[ô] requires a receiver of type [ô]ParallelQuery<<anonymous type: string Favorecido, int Favorecido_Id, int TipoDocumento_Id, string TipoDeDocumento, string Numero, string Parcela, string ValorDocumento, DateTime? Pagamento, string TipoDeOperacao>>[ô]
Porém se ao invés disso eu colocar: cp.Emissao, o erro não ocorre.
Como faço para contornar essa situação?
Mais uma etapa vencida.
Até mais.