Lorsque vous utilisez le code suivant (simplifié), je reçois l'erreurEntity Framework 4.1: référentiel avec "la propriété DefaultOrder"
« Impossible de lancer le type 'System.DateTime' taper 'System.Object'. LINQ to Entities ne prend en charge que les types de primitive Entity Data Model. "
dans la ligne de la déclaration de retour:
public MyRepository<Post>
{
public Expression<Func<Post, object>> DefaultOrder;
public MyRepository()
{
DefaultOrder = p => p.PublishedOn;
}
public IQueryable<Post> All()
{
var entities = new MyDbContext().Set<Post>();
return entities.OrderByDescending(DefaultOrder);
}
}
J'utilise le même code avec db4o/db4o.Linq au lieu de Entity Framework et il n'y avait pas de problème.
Voici mes questions:
- Pourquoi cette erreur se produit?
- Existe-t-il une solution alternative, qui me permet de définir mon DefaultOrder de la même manière (similaire) que maintenant?
EDIT:
trouvé une solution , qui fonctionne pour moi, remplacé l'expression de commande par défaut avec une méthode de commande:
public MyRepository<T>
{
public Func<IQueryable<T>, IOrderedQueryable<T>> DefaultOrderMethod;
public MyRepository()
{
DefaultOrderMethod = o => o.OrderBy(x => x.PublishedOn);
}
public IQueryable<T> All()
{
var entities = new MyDbContext().Set<T>();
return DefaultOrderMethod(entities);
}
}
avez-vous essayé de faire le casting auparavant? ('DefaultOrder = p => (objet) p.PublishedOn;') – AbdouMoumen
Bonne idée! - mais malheureusement ne fonctionne pas ... – davehauser