【发布时间】:2010-02-24 22:22:56
【问题描述】:
我在将应用程序定义的对象列表传递给 RIA 服务时遇到问题。我收到一个编译错误,提示“域操作条目 'GetPagedExams' 的错误参数 'filters' 必须是预定义的可序列化类型之一。”
这是 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 序列化,并在服务器上重新处理它。这真的不是我的首选……
当我为过滤器而不是集合传递单个字符串时,这是一个有效的查询。所以我知道问题出在自定义集合上。
【问题讨论】:
标签: silverlight silverlight-3.0 wcf-ria-services