2010-06-10 20 views
0
class Test { 
    int Id{get;set;} 
    string Name {get;set;} 
    string Description {get;set;} 
} 

//1)ok 
context.Tests.Select(t => new {t.Id, t.Name}).ToList().Select(t => new Test{Id = t.Id, 
Name = t.Name}); 

//2)ok 
class TestPart{ 
    int Id{get;set;} 
    string Name {get;set;} 
} 
context.Tests.Select(t => new TestPart{Id = t.Id, 
Name = t.Name}).ToList().Select(t => new Test{Id = t.Id, 
Name = t.Name}); 

//3)error Explicit construction of entity type 'Test' in query is not allowed. 
context.Tests.Select(t => new Test{Id = t.Id, 
Name = t.Name}).ToList(); 

Existe-t-il un moyen d'utiliser la troisième variante?Comment charger une partie de classe en utilisant linq to sql sans classe anonyme ou classe supplémentaire?

Répondre

0

Si votre classe de test n'est pas utilisée pour écrire des données, vous pouvez désactiver le suivi de l'objet en supprimant la clé primaire dans le dbml. Si les instances de Test ne sont pas suivies pour les modifications, vous pouvez en créer autant que vous le souhaitez dans la requête.

http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/1ce25da3-44c6-407d-8395-4c146930004b

Supposons que vous voulez avoir une classe de test que vous pouvez charge partielle, et une classe de test que vous pouvez écrire de nouveau avec. Il suffit de déposer deux fois la table Test sur le concepteur et de retirer la clé primaire de l'un d'entre eux.

0

Fournir une conversion implicite sur TestPart ou Test devrait faire l'affaire ici. Vous pouvez également envisager de dériver Test depuis TestPart, car Test étend simplement TestPart. Par ceci, vous n'avez pas besoin de définir la conversion implicite.