2010-09-20 21 views
0

J'ai une classe LINQ dbml que j'emballe dans un objet POCO. J'ai construit des constructeurs surchargés qui prennent la classe DBML et init. l'emballage des objets propriétés en fonction de l'objet dbml transmis.Pourquoi mon LINQtoObject IQueryable est-il traité comme LINQtoSQL et ne lance aucune traduction prise en charge vers SQL

Par exemple

public class MyPerson{ 

    public MyPerson(DBMLPerson p) 
    { 
     this.ID = p.ID; 
     this.Name = p.Name; 
    } 
} 

si je puis faire quelque chose comme ça où je retourne un IQueryable

{

return from p in datacontext.DBMLPerson 
     select new MyPerson(p){}; 
} 

Lorsque J'essaie de faire d'autres requêtes sur cette Iquearble je reçois "System.NotSupportedException: Le membre" MyPerson.ID "n'a pas de traduction prise en charge à SQL .."

Toutefois, si je le fais {

return from p in datacontext.DBMLPerson 
     select new MyPerson(){ 
      ID = p.ID; 
      Name = p.Name; 
     }; 
} 

Je ne reçois pas d'erreur du tout et tout fonctionne parfaitement. Fondamentalement, je veux que ma classe gère la conversion de l'objet LINQ à POCO lui-même.

Fondamentalement, je dois utiliser l'initialiseur d'objet ou je suis incapable de faire correspondre sur ce champ.

Répondre