2010-02-24 108 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

相關問題