2010-02-24 5 views
1

Je rencontre un problème lors du passage d'une liste d'objets définis par l'application aux services RIA. Je reçois une erreur de compilation disant que "les filtres de paramètres d'erreur" de l'entrée d'opération de domaine "GetPagedExams" doivent être l'un des types sérialisables prédéfinis. "ne peut pas passer la classe de collection en tant que paramètre aux services RIA

est ici la requête dans le DomainService:

[Query] 
public IQueryable<ExamEntity> GetPagedExams(int first, int pageSize, List<FilterOptions> filters, List<string> sortDescriptions) 
{ 
    return Context.Exams.GetPagedExams(first, pageSize, filters, sortDescriptions).Data.AsQueryable(); 
} 

Les options de filtre classe est définie comme:

[DataContract] 
[Serializable] 
public class FilterOptions 
{ 
    public enum FilterAction 
    { 
     Equals, 
     NotEquals, 
     LessThan, 
     LessThanOrEquals, 
     GreaterThan, 
     GreaterThanOrEquals, 
     Like, 
     NotLike, 
     IsNull, 
     IsNotNull 
    } 

[DataMember] 
[Key] 
public string FieldName 
{ get; set; } 

[DataMember] 
public FilterAction FilterOp 
{ get; set; } 

[DataMember] 
public object FieldValue 
{ get; set; } 

}

Ajout des attributs DataContract et DataMember n'a pas aidé.

Je dois transmettre un nombre variable de contraintes de filtrage qui seront assemblées dans le cadre d'une requête SQL côté serveur, donc une liste d'objets est presque nécessaire. (Oui, il s'agit de SQL brut et la base de données peut être SQL Server ou Oracle.) Je ne peux pas utiliser LINQ et le client Silverlight ne peut pas savoir quelle base de données j'utilise.)

Des suggestions? Je suis sur le point d'essayer de passer une sérialisation XML du client et de le réhydrater sur le serveur. Ce n'est vraiment pas mon option préférée ....

C'était une requête de travail quand je transmettais une seule chaîne pour un filtre, plutôt qu'une collection. Donc, je sais que le problème est strictement avec la collection personnalisée.

Répondre

0

Cela semble être une limitation actuelle des services RIA. Jetez un oeil à MSDN forum

Editer: vient d'avoir ce problème dans un autre projet. Une méthode de travail moins bonne consiste à utiliser une méthode [Invoke], qui peut prendre un paramètre List et renvoyer un IEnumerable<X>, mais les services RIA ne renvoient pas les propriétés de navigation de X.

+0

Merci. Pas la réponse que je voulais, mais c'est une réponse. –

+0

Je suis entièrement d'accord (que ce n'est pas la réponse que beaucoup de gens, y compris moi-même), comme je l'avais essayé aussi. Le fil semble indiquer que MS peut supprimer la limitation. – Timores

+0

Des nouvelles si la limitation a été supprimée? – SteveC

Questions connexes