0

Je ne suis pas sûr si je vais à la bonne façon. J'ai une application Silverlight et j'utilise Entity Framework pour beaucoup. Deux entités sont mappées à ma base de données: En-tête et Détails. Je souhaite soumettre une jointure à gauche pour obtenir tous les en-têtes et les détails, même si l'enregistrement d'en-tête ne contient aucun enregistrement détaillé. Voici la requête LINQ je veux courir à partir du client:Silverlight - LinqToEntities - Comment puis-je retourner les types anonymes

var query = 
     from head in storeContext.Headers 
     join detail in storeContext.Details 
     on head.HeadId equals details.HeadId 
     into group 
     select new 
     { 
     Desc = head.Description, 
     MyCount = group.Count() 
     }; 

Depuis c'est Silverlight, je dois construire ma requête, puis le soumettre au serveur avec la méthode storeContext.Load<T>() de mon service de domaine (Contexte de la client). Parce que cette méthode attend un type, je ne sais pas comment structurer l'appel pour retourner un type anonyme comme je suis dong ci-dessus?

Est-ce que je fais tout faux? Dois-je utiliser une méthode Invoke pour quelque chose comme ça? Si oui, comment et où dois-je définir le type que je veux retourner?

Est-ce que quelqu'un pourrait me pointer dans la bonne direction que je l'apprécierais vraiment.

Merci ... Scott

+0

vous ne pouvez pas retourner types annonymous, cela n'a pas d'importance si vous êtes dans WCF RIA, ou quoi que ce soit – sebagomez

+0

duplicata possible de [Retour type anonyme?] (http://stackoverflow.com/questions/534690/return-anonymous-type) – nawfal

Répondre

5

Vous ne pouvez pas renvoyer un type anonyme. Ils sont, par nécessité, locaux à la portée actuelle.

Votre requête semble correct, mais vous aurez besoin de retourner un type nommé:

var query = 
     from head in storeContext.Headers 
     join detail in storeContext.Details 
     on head.HeadId equals details.HeadId 
     into group 
     select new MyHelper // SPECIFY A CLASS HERE 
     { 
     Desc = head.Description, 
     MyCount = group.Count() 
     }; 

Votre méthode de requête devra retourner un IEnumerable<MyHelper>:

public IEnumerable<MyHelper> GetInfo() 
{ 
    var query ... 

    return query; 
} 
+0

Vous ne pouvez pas retourner un type anonyme en l'enveloppant avec 'dynamic'? –

+0

@Jeff - Je n'ai pas encore joué avec 'dynamic', donc je ne sais pas. – ChrisF

+0

Moi non plus, mais je suis curieux maintenant. Pas que je pense que ce soit nécessairement une bonne idée, mais intéressante néanmoins. –

1

Vous ne pouvez jamais retourner une valeur qui est une instance d'un type anonyme à partir d'une méthode. Les types anonymes sont toujours local à la méthode. Si vous voulez renvoyer un type sur WCF, vous devrez écrire la classe vous-même, plutôt que de vous fier à des types anonymes.