c# - traducir - traductor hablando
Obtener la función de resultados en LinQ sin traducir a la expresión de la tienda (2)
No puede usar este método en Linq-To-Entities porque LINQ no sabe cómo traducir Enum.GetName
a sql. Así que ejecútelo en la memoria con Linq-To-Objects usando AsEnumerable
y después de la consulta use AsQueryable
para obtener el AsQueryable
deseado:
Entonces o bien:
var result = Data()
.OrderBy(x=> x.CapacityId)
.AsEnumerable()
.Select(x => new
{
Rah_CapacityId = x.Rah_CapacityId,
Rah_CapacityName = x.Rah_CapacityName,
Rah_St = Enum.GetName(typeof(Domain.Enums.CapacityState), x.Rah_St),
Rah_LinesId = x.Rah_LinesId
})
.AsQueryable();
Primero debe usar OrderBy
antes de usar AsEnumerable
para beneficiarse del rendimiento de clasificación de la base de datos. Lo mismo se aplica a Where
, siempre haz esto antes de AsEnumerable
(o ToList
).
Necesito obtener el resultado de una función que necesita ejecutar en la consulta Linq. Este resultado se une a la grilla, pero en el tiempo de ejecución encuentro este error:
LINQ to Entities no reconoce el método ''System.String GetName (System.Type, System.Object)'', y este método no se puede traducir a una expresión de tienda.
Este es mi Código:
public IQueryable GetForRah_CapacityList(XQueryParam param)
{
var result = (from x in Data()
select new
{
Rah_CapacityId = x.Rah_CapacityId,
Rah_CapacityName = x.Rah_CapacityName,
Rah_St = Enum.GetName(typeof(Domain.Enums.CapacityState), x.Rah_St),
Rah_LinesId = x.Rah_LinesId
}).OrderByDescending(o => new { o.Rah_CapacityId });
return result;
}
GetName
no se pudo traducir a T-SQL, Linq a Entidades no pudo reconocerlo. Puede modificar el código de la siguiente manera:
var result = (from x in Data().AsEnumerable()
select new
{
Rah_CapacityId = x.Rah_CapacityId,
Rah_CapacityName = x.Rah_CapacityName,
Rah_St = Enum.GetName(typeof(Domain.Enums.CapacityState), x.Rah_St),
Rah_LinesId = x.Rah_LinesId
}).OrderByDescending(o => new { o.Rah_CapacityId });
Con .ToList()
después de que se carguen los datos, cualquier operación adicional (como la selección) se realiza utilizando Linq to Objects, en los datos que ya están en la memoria.
EDITAR : También el tipo de devolución de su método es IQueryable
mientras su consulta es IOrderedEnumerable
de tipo anónimo , por lo que debe cambiar el tipo de método a System.Object
o como una mejor solución crear una clase, enviar los valores a las propiedades de la clase y luego regresar eso.