我在 linq 中對這個查詢有一個問題,我沒有看到任何磨損,任何人都可以幫助我!
LINQ to Entities 不支持 LINQ 運算式節點型別“ArrayIndex”
public List<FiltroItem> CargarFiltroValidacionInformacion(FiltroViewModel filtro, bool validarUsuario, List<decimal> estadosValidos)
{
var query = from ce in _contexto.Certificacion_MPP
where ce.CODENTIDAD.ToString() == Motor.Certificado.Entidad
select ce;
if (validarUsuario)
query = query.Where(x => x.USUARIOASIGNADO.Contains(Motor.Certificado.Usuario));
if (filtro.CodEmpleado.HasValue)
query = query.Where(x => x.CODEMPLEADO == filtro.CodEmpleado);
if (estadosValidos.Any())
query = query.Where(x => x.CODESTADOCERTIFICACION.ToString().Any(y => estadosValidos.Contains(y)));
if (filtro.CodEstadoSolicitud.HasValue)
query = query.Where(x => x.CODESTADOCERTIFICACION == filtro.CodEstadoSolicitud);
if (filtro.FechaIniSolicitud.HasValue)
{
if (!filtro.FechaFinSolicitud.HasValue)
filtro.FechaFinSolicitud = new DateTime(DateTime.Now.Year 1, 12, 31);
query = query.Where(x => x.FECHACREACION >= filtro.FechaIniSolicitud && x.FECHACREACION <= filtro.FechaFinSolicitud);
}
else if (filtro.FechaFinSolicitud.HasValue)
{
filtro.FechaIniSolicitud = new DateTime(DateTime.Now.Year - 1, 1, 1);
query = query.Where(x => x.FECHAFIN >= filtro.FechaIniSolicitud && x.FECHAFIN <= filtro.FechaFinSolicitud);
}
return query.Select(c => new FiltroItem
{
CodEmpleado = c.CODEMPLEADO,
MotivoCertificacion = ((EnumMotivoCertificacion)c.CODMOTIVOCERTIFICACION).ToString(),
Estado = ((EnumPPEstadoCertificacion)c.CODESTADOCERTIFICACION).ToString(),
FechaSolicitud = c.FECHACREACION,
CodCertificacion = c.CODCERTIFICACION,
UsuarioCertificadoLab = c.USUARIOASIGNADO.Split('|')[0],
UsuarioCertificadoSal = c.USUARIOASIGNADO.Split('|')[1],
})
.OrderBy(x => x.FechaSolicitud)
.ToList();
}
uj5u.com熱心網友回復:
問題不在于 LINQ 本身,而在于特定的 LINQ 提供程式。LINQ 基本上是“語法糖”,由特定的 LINQ 提供程式將您的 LINQ 代碼轉換為對查詢它支持的特定串列有用的東西。物體框架有自己的 LINQ 提供程式,稱為 LINQ to Entities,該提供程式必須將您的 LINQ 代碼轉換為可以針對基礎資料庫執行的 SQL。這意味著某些在 C# 中完全有效的代碼無法在運行時執行,因為沒有有效的 SQL 轉換。在您的具體情況下,問題似乎在這里:
UsuarioCertificadoLab = c.USUARIOASIGNADO.Split('|')[0],
UsuarioCertificadoSal = c.USUARIOASIGNADO.Split('|')[1],
根據錯誤訊息,似乎Split
可以完成該部分,但索引結果陣列是無效的。您必須找到其他方法來獲取這些子字串。也許First
并且Last
會起作用,或者您可能只需要撤回全文并在本地拆分它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/498011.html
上一篇:嵌套for回圈在正常遞增后重置