>我正在创建一个报告,需要将查询从SQL Server传递到实体框架。
查询为:
SELECT
contas_receber.id, pessoa.nome, contas_receber.vencimento,
contas_receber.valor_pago, contas_receber.observacao, pessoa.estado
FROM
contas_receber
INNER JOIN
pessoa ON contas_receber.pessoa_id = pessoa.id
INNER JOIN
classificacoes ON classificacoes.id = pessoa.classificacao_id
LEFT OUTER JOIN
servicos ON servicos.id = contas_receber.servico_id
LEFT OUTER JOIN
produto ON produto.id = contas_receber.venda_id
WHERE
(contas_receber.quitado = 0)
AND (CAST(contas_receber.vencimento AS date) >= @datavenc1)
AND (CAST(contas_receber.vencimento AS DATE) <= @datavenc2)
AND (classificacoes.id = @idclassificacao OR @idclassificacao IS NULL)
AND (servicos.id = @idservico OR @idservico IS NULL)
AND (servicos.plano = @tiposervico OR @tiposervico IS NULL)
AND (produto.id = @idproduto OR @idproduto IS NULL)
AND (pessoa.status_financeiro = @statusfinanceiro OR @statusfinanceiro IS NULL)
AND (pessoa.estado = @estado OR @estado IS NULL)
ORDER BY
contas_receber.vencimento
您将如何留在实体框架中?
到目前为止我做了什么:
var contas = from c in _context.ContasReceber
join p in _context.Pessoas on c.PessoaId equals p.Id
join cl in _context.Classificacoes on p.ClassificacaoId equals cl.Id
join ps in _context.PlanosServicos on c.ServicoId equals ps.Id
join pr in _context.Produtos on c.IdVenda equals pr.Id
join tp in _context.TiposProdutos on pr.TiposProdutosId equals tp.Id
where c.Vencimento >= Inicial && c.Vencimento <= Final && (cl.Id == classificacoes || classificacoes is null)
课程不同,因为座位不同,但感觉是一样的。我最大的问题是在条件 whare 中,当您必须验证变量是否为 null 时
使用
Database.SqlQuery():
数据库类表示基础数据库,并提供各种方法来处理数据库。Database.SqlQuery(( 方法返回任何类型的值。
示例请参阅此链接
using (var ctx = new SchoolDBEntities())
{
string studentName = ctx.Database.SqlQuery<string>("Select studentname from Student
where studentid=1").FirstOrDefault();
}