Je rencontre des problèmes lors de l'utilisation de la méthode d'extension OrderBy sur une requête LINQ lorsqu'elle fonctionne sur un type enum. J'ai créé un DataContext régulier en utilisant Visual Studio en faisant simplement glisser et déposer tout sur le concepteur. J'ai ensuite créé des modèles d'entité séparés, qui sont simplement des POCO, et j'ai utilisé un modèle de référentiel pour extraire les données de ma base de données et les mapper dans mes propres modèles d'entité (ou plutôt, j'ai un modèle de référentiel qui construit et IQueryable ça va faire tout ça).Linq To SQL OrderBy, problème lors de l'utilisation d'enums
Tout fonctionne très bien, sauf lorsque j'essaie d'appliquer un OrderBy (en dehors du référentiel) sur une propriété que j'ai mappée de short/smallint à enum.
Voici les bits de code correspondant:
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,
...
};
}
}
Et puis ailleurs
SqlCampaignRepository rep = new SqlCampaignRepository();
var query = rep.Campaigns().OrderBy(c => c.Status);
Cela déclenche l'exception suivante: System.ArgumentException était non gérée par le code utilisateur Message = "L'argument ' valeur 'était le mauvais type.' IQMedia.Models.CampaignType 'attendu.' System.Int16 '. Source = "System.Data.Linq" StackTrace: System.Data.Linq.SqlClient.SqlOrderExpression.set_Expression (valeur SqlExpression) cb System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitSelect cb (SqlSelect select) ved System.Data.Linq.SqlClient.SqlVisitor.Visit (nœud de SqlNode) System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitIncludeScope ved (champ d'application de SqlIncludeScope)
...(désolé danoise là-dedans , ved = par/at).
J'ai essayé de typer le statut à court dans l'expression orderBy, mais cela ne l'aide pas, même si je l'ai casté au type enum réel aussi bien.
Toute aide pour résoudre ce problème est grandement appréciée!