не может передать класс коллекции в качестве параметра в RIA Services - PullRequest
1 голос
/ 25 февраля 2010

У меня проблема с передачей списка определенных приложением объектов службам 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 голосов
/ 25 февраля 2010

Похоже, что это текущее ограничение RIA Services. Загляните на форум MSDN

Редактировать: только что снова возникла эта проблема в другом проекте. Не очень удачным решением является использование метода [Invoke], который может принимать параметр List и может возвращать IEnumerable<X>, но RIA Services не отправляет обратно свойства навигации X.

...