2011-03-03 4 views
2

J'utilise Silverlight 4 avec les services WCF RIA (services de domaine avec EF4). Maintenant, je voudrais ajouter une fonctionnalité, qui permet à un utilisateur d'interroger des données en fonction des critères sélectionnés par l'utilisateur (requête ad-hoc). J'ai trouvé que:Requête dynamique avec services RIA WCF

-WCF Les services RIA n'autorisent pas les types anonymes, donc la projection linq n'est pas possible. -Exposer OData n'aide pas (beaucoup), car vous ne pouvez pas filtrer les données côté client.

recherche Internet, il semble que je peux utiliser la bibliothèque de LINQ dynamique décrite dans le lien suivant:

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

En bref, le lien ci-dessus montre comment passer la recherche principale à serveur et exécuter la requête au du côté serveur. Mais qu'en est-il du renvoi de données arbitraires? Les types anonymes ne peuvent pas être transmis, et je ne veux pas que l'utilisateur récupère toutes les données, mais seulement celles que l'utilisateur a choisies. Peut-être que je devrais sérialiser mes données d'entité dans le service de domaine et le passer en XML brut? C'est possible? Si oui, comment puis-je faire cela?

+0

Je ne comprends parfaitement, vous pouvez simplement ajouter un certain nombre de paramètres de requête annulable à votre classe DomainService et les transmettre au service? –

Répondre

1

Pour un de nos scénarios, nous avons une opération DomainService qui renvoie des chaînes XML, il ressemble à ceci:

public IQueryable<WidgetInfo> GetWidgetList() 
{ 
    IList<WidgetInfo> widgets = WidgetDatabase.GetWidgets(userId); 
    return widgets.AsQueryable(); 
} 

WidgetInfo ressemble à ceci:

public class WidgetInfo 
{ 
    [Key] 
    public int Id; 
    public string Title; 
    public string WidgetData; // Contains XML description of data 
} 
0

Je vais répondre à des données arbitraires retournées. Jetez un oeil à la discussion ici: https://stackoverflow.com/a/10018119/178620

J'ai atteint le retour de données arbitraires en créant une nouvelle entité POCO, qui contient IEnumerable. Et je fais la sérialisation et la désérialisation en utilisant Json.Net Bson, qui est beaucoup plus rapide que XML.

Mise à jour: Il y a aussi la bibliothèque dynamique LINQ (https://stackoverflow.com/a/848435/178620)