我正在开发一个 MVC 网站,因为我是 mvc 的新手,所以我遇到了一些问题。这个真的很奇怪,一直困扰着我一段时间。我正在使用 LINQ 进行查询,其中一些查询非常非常慢。
然后我打开 SQL Server Profiler 以更接近的方式查找查询。我刚刚注意到,我的 LINQ 查询在没有 where 子句的情况下被发送到数据库,这使得执行需要很长时间。
现在我将发布代码的相关部分,看看你们是否会出错。
模型
[Table("tblSolicitacao")]
public partial class ChamadosViewModel
{
[Key]
public int Nsu { get; set; }
[Required(ErrorMessage = "*")]
public int IdAutor { get; set; }
[Required(ErrorMessage = "*")]
[DisplayName("Assunto")]
public string NomeDaSolicitacao { get; set; }
[Required(ErrorMessage = "*")]
[DisplayName("Descrição")]
public string Descricao { get; set; }
[Required(ErrorMessage = "*")]
[DisplayName("Grupo")]
public string Grupo { get; set; }
[Required(ErrorMessage = "*")]
[DisplayName("Atividade")]
public string Atividade { get; set; }
[Required(ErrorMessage = "*")]
[DisplayName("Prioridade")]
public string Prioridade { get; set; }
[Required(ErrorMessage = "*")]
[DataType(DataType.DateTime, ErrorMessage = "Formato de Data Inválido")]
public Nullable<System.DateTime> DataPretendidaPeloAutor { get; set; }
public Nullable<bool> AcompanharViaEmail { get; set; }
public Nullable<int> IdAnalistaDesignado { get; set; }
public string Complexidade { get; set; }
public Nullable<System.DateTime> DataPrevistaPeloAnalista { get; set; }
public Nullable<int> SubordinacaoDeSolicitacao { get; set; }
public string COD_FORNECEDOR { get; set; }
public Nullable<decimal> TOLERANCIA { get; set; }
public string DESC_COND_PGTO { get; set; }
public string FILIAL_FATURAR { get; set; }
public string FILIAL_ENTREGA { get; set; }
public string FILIAL_COBRANCA { get; set; }
public string MOTIVO_COMPRA { get; set; }
public Nullable<int> TIPO_SOLICITACAO { get; set; }
public string FORMA_PGTO { get; set; }
public string MOTIVOCHAMADO { get; set; }
public Nullable<int> TEMPORESOLUCAO { get; set; }
public string CodigoRateioFilial { get; set; }
public string CodigoRateioCentroCusto { get; set; }
public Nullable<System.DateTime> DataSolicitacao { get; set; }
[NotMapped]
public string NomeAutor { get; set; }
[NotMapped]
public string NomeAnalista { get; set; }
public IEnumerable<genericoGruposViewModel> Grupos { get; set; }
[NotMapped]
public List<ListItem> Transitos { get; set; }
public List<string> Complexidades { get; set; }
public IEnumerable<genericoGrupoAtividadeViewModel> Atividades { get; set; }
public IEnumerable<genericoPrioridadeViewModel> Prioridades { get; set; }
public IEnumerable<ColaboradorViewModel> Usuarios { get; set; }
[NotMapped]
IEnumerable<ColaboradorViewModel> AnalistasDesignados { get; set; }
}
控制器
ChamadosViewModel ChamadoDetalhe = new ChamadoDetalhe();
ChamadoDetalhe = _dbHelpDesk.Chamados
.ToList()
.Where(x => x.Nsu == NumeroChamado)
.Select(x => new ChamadosViewModel
{
Nsu = x.Nsu,
IdAutor = x.IdAutor,
NomeDaSolicitacao = x.NomeDaSolicitacao,
Descricao = x.Descricao,
Grupo = x.Grupo,
Atividade = x.Atividade,
Prioridade = x.Prioridade,
DataPretendidaPeloAutor = x.DataPretendidaPeloAutor,
AcompanharViaEmail = x.AcompanharViaEmail,
IdAnalistaDesignado = x.IdAnalistaDesignado,
Complexidade = x.Complexidade,
DataPrevistaPeloAnalista = x.DataPrevistaPeloAnalista,
SubordinacaoDeSolicitacao = x.SubordinacaoDeSolicitacao,
COD_FORNECEDOR = x.COD_FORNECEDOR,
TOLERANCIA = x.TOLERANCIA,
DESC_COND_PGTO = x.DESC_COND_PGTO,
FILIAL_FATURAR = x.FILIAL_FATURAR,
FILIAL_ENTREGA = x.FILIAL_ENTREGA,
FILIAL_COBRANCA = x.FILIAL_COBRANCA,
MOTIVO_COMPRA = x.MOTIVO_COMPRA,
TIPO_SOLICITACAO = x.TIPO_SOLICITACAO,
FORMA_PGTO = x.FORMA_PGTO,
MOTIVOCHAMADO = x.MOTIVOCHAMADO,
TEMPORESOLUCAO = x.TEMPORESOLUCAO,
CodigoRateioFilial = x.CodigoRateioFilial,
CodigoRateioCentroCusto = x.CodigoRateioCentroCusto,
DataSolicitacao = x.DataSolicitacao
}
)
.Single()
这就是进入数据库的选择
SELECT
[Extent1].[Nsu] AS [Nsu],
[Extent1].[IdAutor] AS [IdAutor],
[Extent1].[NomeDaSolicitacao] AS [NomeDaSolicitacao],
[Extent1].[Descricao] AS [Descricao],
[Extent1].[Grupo] AS [Grupo],
[Extent1].[Atividade] AS [Atividade],
[Extent1].[Prioridade] AS [Prioridade],
[Extent1].[DataPretendidaPeloAutor] AS [DataPretendidaPeloAutor],
[Extent1].[AcompanharViaEmail] AS [AcompanharViaEmail],
[Extent1].[IdAnalistaDesignado] AS [IdAnalistaDesignado],
[Extent1].[Complexidade] AS [Complexidade],
[Extent1].[DataPrevistaPeloAnalista] AS [DataPrevistaPeloAnalista],
[Extent1].[SubordinacaoDeSolicitacao] AS [SubordinacaoDeSolicitacao],
[Extent1].[COD_FORNECEDOR] AS [COD_FORNECEDOR],
[Extent1].[TOLERANCIA] AS [TOLERANCIA],
[Extent1].[DESC_COND_PGTO] AS [DESC_COND_PGTO],
[Extent1].[FILIAL_FATURAR] AS [FILIAL_FATURAR],
[Extent1].[FILIAL_ENTREGA] AS [FILIAL_ENTREGA],
[Extent1].[FILIAL_COBRANCA] AS [FILIAL_COBRANCA],
[Extent1].[MOTIVO_COMPRA] AS [MOTIVO_COMPRA],
[Extent1].[TIPO_SOLICITACAO] AS [TIPO_SOLICITACAO],
[Extent1].[FORMA_PGTO] AS [FORMA_PGTO],
[Extent1].[MOTIVOCHAMADO] AS [MOTIVOCHAMADO],
[Extent1].[TEMPORESOLUCAO] AS [TEMPORESOLUCAO],
[Extent1].[CodigoRateioFilial] AS [CodigoRateioFilial],
[Extent1].[CodigoRateioCentroCusto] AS [CodigoRateioCentroCusto],
[Extent1].[DataSolicitacao] AS [DataSolicitacao]
FROM [dbo].[tblSolicitacao] AS [Extent1]
你们能想象这个 where 子句被省略的原因吗?也许我的模特课上有什么?
感谢您的支持。