无法将集合类作为参数传递给RIA Services

时间:2010-02-24 22:22:56

标签: silverlight silverlight-3.0 wcf-ria-services

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

以下是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序列化,并在服务器上重新保湿。这真的不是我的首选....

当我为过滤器而不是集合传递单个字符串时,这是一个有效的查询。所以我知道问题严格来说就是自定义集合。

1 个答案:

答案 0 :(得分:0)

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

编辑:在另一个项目中再次遇到此问题。一个不那么好的解决方法是使用[Invoke]方法,它可以获取List参数并返回IEnumerable<X>,但RIA服务不会发回X的导航属性。 / p>