2010-09-23 41 views
0

我有一個數據庫,最終將包含數千條記錄,並將使用Silverlight自動完成框控件和WCF RIA服務搜索此列表。我使用的基本實現,而不在我的域數據源的「GetXXXQuery」任何參數:Silverlight自動完成和WCF RIA服務:整個列表是否返回給客戶端?

public IQuerable<XXX> GetXXXs() 
{ 
    return this.ObjectContext.XXXs; 
} 

我將使用「姓名」作爲ValueMemberPath使用在自動完成此查詢的返回值。

我的對象列表現在很小,所以列出所有記錄的速度非常快。我的問題是:一旦我的記錄列表變得更大,或者如果有更多人訪問服務器,此實現是否有效?它是否返回數據庫中的整個記錄​​列表,或者IQueryable對象是否允許基於我的自動填充框中的字符串進行查詢,從數據庫中有效返回一小部分記錄?

感謝,丹尼斯

回答

0

如果添加一個搜索詞的RIA Linq查詢,即where子句添加到RIA Linq查詢,這將可以解決服務器端。只有匹配的結果會被傳回,而不是整個表格*。

IQuerable <>查詢實際上是由Ria服務在客戶端序列化並傳遞給服務器執行的。輝煌的體系。特別適用於分頁/搜索數百萬條記錄。

*(注意:如果您在給定期限內得到很多匹配,您可能需要決定是否返回有限數量的記錄。除非至少有3個字符,否則您也不想開始搜索鍵入)。

+0

HiTech Magic - 感謝您的回覆,但是您提到的數據網格和分頁使我懷疑......在這種情況下,查詢並不是由查詢器事後處理的,因此它會調用skip( n)。使用(m)返回的IQueryable ? domaindatasource本身的查詢不需要頁面/頁面大小參數,對吧?我想我可以試着用提琴手看這個迴應......這可能會爲我澄清,但我想我會問。 – 2010-09-23 19:34:45

+0

您提到了where子句......那是我認爲自動完成控件處理的東西,畢竟它具有諸如「開始於」或「包含」之類的模式,不區分大小寫,所有這些模式都需要被我的「GetXXX」查詢複製,這對我來說沒有意義。 – 2010-09-23 19:44:47

+0

@丹尼斯病房:很對。有時候我會忘記打字而不去讀它。你確實可以在客戶端添加額外的子句。這是查詢的評估導致發送Linq到服務器。我會在正確的答案:)我的措辭 – 2010-09-23 20:09:37

相關問題