Je souhaite créer un objet Entity à partir d'une instruction LinQ, mais je ne souhaite pas charger toutes ses colonnes.Entity Framework - Problème de projection LinQ
Mon objet ORDERS contient beaucoup de colonnes, mais je veux juste récupérer les colonnes REFERENCE et OPERATION pour que l'instruction SQL et le résultat soient plus petits.
Cette déclaration LinQ fonctionne correctement et charges tous mes attributs d'objet:
var orders = (from order in context.ORDERS
select order);
Cependant, la déclaration suivante ne se charge que deux propriétés de mon objet
var orders = (from order in context.ORDERS
select new ORDERS
{
REFERENCE = order.REFERENCE,
OPERATION = order.OPERATION
});
L'erreur renvoyée est:
The entity or complex type 'ModelContextName.ORDERS' cannot be constructed in a LINQ to Entities query.
Quel est le problème? N'est-il pas possible de charger partiellement un objet de cette façon?
Merci d'avance pour vos réponses.
RÉPONSE
Ok je vous remercie tous les deux Yakimych et Dean parce que je l'utilise à la fois de vos réponses, et maintenant j'ai:
var orders = (from order in context.ORDERS
select new
{
REFERENCE = order.REFERENCE,
OPERATION = order.OPERATION,
})
.AsEnumerable()
.Select(o =>
(ORDERS)new ORDERS
{
REFERENCE = o.REFERENCE,
OPERATION = o.OPERATION
}
).ToList().AsQueryable();
Et je reçois exactement ce que je veux, le SQL Statement n'est pas parfait mais il retourne seulement les 2 colonnes dont j'ai besoin (et une autre colonne qui contient pour chaque ligne "1" mais je ne sais pas pourquoi pour l'instant) - J'ai aussi essayé de construire des sous-objets avec cette méthode Ça marche bien.
OK, j'ai déjà essayé mais comment puis-je convertir cet objet anonyme en type Entity? – mbp
Vous ne pouvez pas mapper cela à une entité.Vous pouvez créer un objet personnalisé (DTO) pour cela, mais vous ne pouvez pas charger partiellement une entité, car EF ne saurait pas en faire quoi que ce soit lorsque vous essayez de le modifier et de le sécuriser. – Steven