Tengo algunos problemas con el uso del método de extensión OrderBy en una consulta LINQ cuando está operando en un tipo de enumeración. He creado un DataContext normal usando Visual Studio simplemente arrastrando y soltando todo en el diseñador. Luego creé modelos de entidades separados, que son simplemente POCO, y utilicé un patrón de repositorio para obtener los datos de mi base de datos y asignarlos a mis propios modelos de entidades (o más bien, tengo un patrón de repositorio, que se acumula e IQueryable eso hará todo esto).Linq a SQL OrderBy, problema al usar enums
Todo funciona bien, excepto cuando intento aplicar un OrderBy (fuera del repositorio) en una propiedad que he asignado desde short/smallint a una enumeración.
Éstos son los bits de código relevantes:
public class Campaign
{
public long Id { get; set; }
public string Name { get; set; }
....
public CampaignStatus Status { get; set; }
...
}
public enum CampaignStatus : short {
Active,
Inactive,
Todo,
Hidden
}
public class SqlCampaignRepository : ICampaignRepository
{
...
public IQueryable<Campaign> Campaigns()
{
DataContext db = new DataContext();
return from c in db.Campaigns
select new Campaign
{
Id = c.Id,
Name = c.Name,
...
Status = (CampaignStatus)c.Status,
...
};
}
}
Y luego en otros lugares
SqlCampaignRepository rep = new SqlCampaignRepository();
var query = rep.Campaigns().OrderBy(c => c.Status);
Esto desencadena la siguiente excepción: System.ArgumentException era controlada por el código de usuario mensaje = "El argumento ' valor 'era el tipo incorrecto. Se esperaba' IQMedia.Models.CampaignType '. Actual' System.Int16 '. " Fuente = "System.Data.Linq" StackTrace: System.Data.Linq.SqlClient.SqlOrderExpression.set_Expression ved (valor EnunciadoSql OperadorCompatible EnunciadoParamétricoOConstante) ved System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitSelect (SqlSelect seleccionar) Ved System.Data.Linq.SqlClient.SqlVisitor.Visit (nodo sqlnode) System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitIncludeScope ved (alcance SqlIncludeScope) ...
(lo de la danesa allí , ved = por/a).
He intentado encasillar el estado a abreviar en la expresión orderBy, pero eso no lo ayuda, lo mismo si lo echo al tipo de enumeración real también.
Cualquier ayuda para solucionar esto es muy apreciada.