2010-02-24 103 views
1

我在将应用程序定义的对象列表传递给RIA服务时遇到问题。我得到一个编译错误,说“域参数'过滤器'的'错误参数'过滤''GetPagedExams'必须是预定义的可序列化类型之一。”无法将收集类作为参数传递给RIA服务

下面是在的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(); 
} 

过滤选项类定义为:

[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; } 

}

添加DataContract和DataMember属性并没有帮助。

我需要传递可变数量的过滤约束,这些过滤约束将作为服务器端SQL查询的一部分进行汇编,因此对象列表正好是必需的。 (是的,它下面是原始的SQL,而数据库可以是SQL Server或Oracle,所以我不能使用LINQ,Silverlight客户端也不知道我使用的是哪个数据库。)

有什么建议吗?我只是想尝试从客户端传递XML序列化,并在服务器上重新提供它。这真的不是我的首选...

这是一个工作查询,当我传递一个过滤器,而不是一个集合的字符串。所以我知道这个问题严格限制在自定义集合中。

回答

0

这似乎是RIA服务的当前局限性。看看MSDN forum

编辑:只是在另一个项目中再次发生这个问题。一个不太好的解决方法是使用[Invoke]方法,该方法可以接受List参数,并且可以返回IEnumerable<X>,但RIA服务不会返回X的导航属性。

+0

谢谢。不是我想要的答案,但它是一个答案。 – 2010-02-25 14:00:34

+0

我完全同意(这不是包括我自己在内的许多人的回答),因为我也试过这个。该线程似乎暗示MS能够消除限制。 – Timores 2010-02-25 15:45:37

+0

任何消息是否限制已被删除? – SteveC 2011-01-25 16:10:41

相关问题