逐步解說:擷取和顯示網域服務的資料
這個主題將說明如何從 Silverlight 應用程式呼叫網域內容上的方法 (對應至要存取的網域服務查詢方法),然後如何在該查詢上套用其他篩選來限制要傳回或顯示的實體。
為擷取 Silverlight 應用程式中的資料,您要呼叫網域內容上的方法,它會對應至您要使用的網域服務查詢方法。例如,在名為 GetProducts
的網域服務中的查詢方法在名為 GetProductsQuery
的網域內容中將會有對應的方法。在 Silverlight 應用程式中呼叫 GetProductsQuery
,該方法會傳回 EntityQuery 物件。
在 Silverlight 應用程式中,您可以對查詢套用額外的篩選,限制傳回哪些實體。查詢方法可能會從 Products 資料表傳回每筆記錄,但您可能只想要顯示價格值小於 100 的產品。您可以使用 LINQ 和 LINQ 查詢運算子的子集,修改由查詢傳回的結果。以下列出可用的查詢運算子:
Where
OrderBy
ThenBy
Skip
Take
在套用額外的篩選之後,將 EntityQuery 物件傳遞給 Load 方法中的參數,以執行查詢並取得結果。
如果查詢中 QueryAttribute 的 IsComposable 屬性設為 false,便無法對查詢套用額外的篩選。一般而言,只有傳回單一實體的查詢才會將 IsComposable 設為 false。
您可以將資料繫結至任何呈現資料的 Silverlight 控制項。DataGrid 控制項可以用資料表的格式呈現資料。
本逐步解說將說明如何擷取和顯示網域服務的資料。它也示範如何使用可用的查詢運算子對查詢套用額外的篩選。
必要條件
除了 WCF RIA Services 和 WCF RIA Services 工具組之外,在 WCF RIA Services 文件中呈現的這個逐步解說和其他逐步解說還需要正確安裝並設定數個必要程式 (例如 Visual Studio 2010 和 Silverlight 開發人員執行階段與 SDK)。要執行逐步解說還需要安裝並設定 SQL Server 2008 R2 Express with Advanced Services,以及安裝 AdventureWorks OLTP 和 LT 資料庫。
在 WCF RIA Services 的必要條件節點中的主題也提供符合這些必要條件的詳細指示。請先按照該處提供的指示進行,然後再進行本逐步解說,以確保您在進行本 RIA Services 逐步解說時不會發生問題。
本逐步解說假設您已完成逐步解說:建立 RIA Services 方案,並從這裡所述之程序建立的應用程式繼續。
若要擷取和顯示網域服務的資料
開啟取自完成逐步解說:建立 RIA Services 方案主題所述之指示的 RIAServicesExample 方案。
在 Silverlight 應用程式中,開啟 MainPage.xaml 的程式碼後置檔案。
呼叫
GetCustomersQuery
方法,以建立 EntityQuery 執行個體。使用可用的查詢作業篩選客戶。
將查詢物件傳遞給 Load 方法並將傳回值指派至 LoadOperation。
下列程式碼示範如何從網域服務擷取客戶。它會篩選電話號碼開頭為 583 的客戶,然後再依據 LastName 的字母順序排列這些客戶。結果會顯示在 DataGrid 中。
Partial Public Class MainPage Inherits UserControl Private _customerContext As New CustomerDomainContext Public Sub New() InitializeComponent() Dim query As EntityQuery(Of Customer) query = _ From c In Me._customerContext.GetCustomersQuery() _ Where c.Phone.StartsWith("583") _ Order By c.LastName Dim loadOp = Me._customerContext.Load(query) CustomerGrid.ItemsSource = loadOp.Entities End Sub End Class
public partial class MainPage : UserControl { private CustomerDomainContext _customerContext = new CustomerDomainContext(); public MainPage() { InitializeComponent(); EntityQuery<Customer> query = from c in _customerContext.GetCustomersQuery() where c.Phone.StartsWith("583") orderby c.LastName select c; LoadOperation<Customer> loadOp = this._customerContext.Load(query); CustomerGrid.ItemsSource = loadOp.Entities; } }