2011-07-25 98 views
0

首先抱歉我的英文不好。RIA EF4複合多對多過濾器

我有類似的DB結構:

enter image description here

使用RIA服務與EF4.1什麼會只選擇汽車,它有一些特點的最好方法?

在客戶端上,用戶可以選擇多個「特徵」並通知價值。 然後我需要顯示具有該特定值的所有汽車(「值」保存在CarCharacteristic表中) (類似於所有「汽車」(汽車)具有「2」(CarCharacteristic)「門」(特性))

我想這樣做在客戶端上,但現在看來,這是不可能的:(

爲了能夠在服務器上過濾這些信息,我需要至少發送所選特性的所有特徵ID和用戶通知值給每一個。

問題是,如果我創建查詢任何複雜的(例如MyClass的[])參數I得到錯誤:

參數域操作條目「GetCarsByCharacteristic」的「X」必須是預定義的序列化類型中的一種

我想我失去了一些東西很明顯這裏,因爲它可以不用那麼辛苦......

怎麼會做這種事情的正確方法?

回答

0

首先,既然你要發送一個數組作爲查詢的參數,您需要與HasSideEffects=true屬性標記查詢,像這樣:

[Query(HasSideEffects=true)] 

現在你也許能夠發送你自己的班級作爲參數(我不確定,我還沒有檢查),但你可以肯定使用Dictionary<Guid, int>類型的參數,我假設Guid是你使用的類型Ids,而int是值。

現在您可以根據需要通過ID和值過濾設置。

編輯: 此外,你沒有提到使用DomainDataSource,所以我猜你正在與DomainContext對象工作。在這種情況下,您可以像這樣添加過濾客戶端:

 ctx.Load(ctx.GetMyDataQuery().Where(entity => entity.Value = value && entity.CharacteristicId = characteristicId), false);