查詢:從資料來源擷取資訊

您可以使用「查詢」(Query) 傳回符合一組準則的資料。 例如,如果您想要知道您的客戶有多少住在美國,您會建立查詢,以掃描一份客戶清單,並檢查其地址中指定的國家 (地區)。

您可以建立查詢,並將其儲存至應用程式的模型。 然後您可以使用「查詢設計工具」(Query Designer) 來指定您的搜尋準則。 如果查詢設計工具沒有提供您需要的功能,您可以撰寫一些程式碼來擴充查詢。 當您指定好準則後,請將查詢使用於畫面中,或做為商務邏輯的一部分來執行。

建立查詢

您可以在 [方案總管] 中建立查詢。 查詢僅以應用程式的模型中的一個實體或資料表 (例如 Customer 實體) 為基礎。 查詢還可以根據應用程式的模型中的其他查詢來建立。 查詢所根據的實體、資料表或查詢就稱為查詢的「來源」(Source) 資料。 如需詳細資訊,請參閱如何:新增、移除和修改查詢

使用查詢設計工具以設計查詢

在大多數情況下,您可以使用查詢設計工具,以視覺方式設計查詢。 在設計工具中進行選取,以將「篩選條件」(Filter Condition) 和「篩選群組」(Filter Group)、「排序條件」(Sort Term) 和「參數」(Parameter) 加入至查詢。 如需詳細資訊,請參閱如何:使用查詢設計工具設計查詢

篩選條件

您可以加入一個或多個「篩選條件」(Filter Condition) 來縮小查詢結果。 篩選條件會描述每個資料列必須符合的規則。 符合規則的資料列會包括在查詢結果中。 篩選條件包含下列三個基本部分:

  • 選取範圍屬性

  • 比較值

  • 運算子

「選取範圍屬性」(Selection Property) 是您要用來做為篩選器條件之基準的屬性。 例如,要傳回特定訂單日期的銷售訂單,您可能會使用 OrderDate 做為選取範圍屬性。 選取範圍屬性可以是來源資料中的屬性或相關實體或資料表上的屬性。 在查詢設計工具中,只有多重性為零對一端或一端的相關實體或資料表才會顯示屬性。 例如,銷售訂單只有一個客戶。 因此,在傳回銷售訂單的查詢中,您可以選取相關客戶的屬性做為篩選條件的一部分。 如果您要在多重性為多端的相關實體或資料表上使用屬性,您必須使用程式碼來擴充查詢。

「比較值」(Comparison Value) 會與選取範圍屬性進行比較。 比較值可以是常值 (例如字串 "2009 年 9 月 22 日上午 12:00:00")、選取範圍屬性、參數或相對值 (例如 [現在]、[今天] 或 [每週開始日])。

「運算子」(Operator) 是指定要進行之比較類型的符號。 例如,要傳回早於「2009 年 9 月 22 日上午 12:00:00」前的銷售訂單,您可以選取 [<] 運算子。

本範例所述的完整篩選條件是 Where OrderDate < 9/22/2009 12:00:00 AM。

您可以使用下列其中一個邏輯運算子:And、And Not、Or、Or Not,將篩選條件與其他篩選條件產生關聯。

您可將條件拖曳至設計工具中所需的位置,以變更其順序。

下圖顯示篩選條件的組成部分。

查詢中的篩選條件

篩選群組

您可以將篩選條件組成群組,以便將其評估為不同於其他篩選條件的單一單元。 若要達成此目的,請在查詢設計工具中建立「篩選群組」(Filter Group)。

群組篩選條件就像是在數學方程式的運算式或邏輯陳述式周圍加上括號一樣。 當您將條件組成群組時,在群組中的第一個條件之前出現的邏輯運算子將會套用至整個組。

就和個別篩選條件一樣,您可將其拖曳至設計工具中所需的位置,以變更篩選群組的順序。

下圖顯示的是兩個篩選群組。

查詢中的篩選群組

排序條件

您可以加入一個或多個「排序條件」(Sort Term) 來指定在查詢結果中顯示記錄的預設順序。 排序條件包含屬性和方向 (例如 OrderDate 和 Ascending)。 排序條件定義畫面顯示的記錄的預設排序順序。 使用者可以在畫面的使用者介面 (UI) 上進行選取,依不同的順序檢視記錄。 在查詢設計工具中,您可將排序條件拖曳到清單中所需的位置,以變更其順序。

參數

您可以讓使用者動態篩選查詢結果。 例如,您可以在畫面上選取特定的銷售區域,讓使用者能夠檢視區域銷售訂單。 若要支援此情節,請將「參數」(Parameter) 加入至查詢,並適當命名該查詢 (例如,SalesTerritory)。 然後將篩選的比較值設定為參數。 例如,查詢運算式可能是 Where TerritoryID = SalesTerritory。

您可以設計讓使用者能夠在執行階段提供參數值的畫面。 如需詳細資訊,請參閱如何:為查詢參數提供值

使用程式碼以擴充查詢

查詢設計工具不支援某些類型的篩選條件。 如果您遇到使用設計工具的限制,您可以使用程式碼將條件加入至查詢。

注意事項注意事項

您無法擴充畫面的查詢。您只能擴充出現在 [方案總管] 中的查詢。如需編輯畫面之查詢的詳細資訊,請參閱 如何:篩選 Silverlight 螢幕上的資料

下表顯示兩個無法使用查詢設計工具建立的篩選條件。

篩選條件

使用程式碼的原因

根據銷售訂單數量傳回數量最高的前 10 名客戶。

若要確定銷售訂單的數量,您必須使用 Count 作業。 在查詢設計工具中,無法執行某些作業,例如 CountAggregateSum

傳回所有已購買手推車的客戶。

若要判斷客戶是否已購買手推車,您需要參考 Product 實體的篩選條件。 由於一個客戶可以和多個產品有關聯,因此 Product 實體可能會存在於 Customer-Product 關聯性的多端上。 查詢設計工具無法讓您瀏覽至關聯性的多端。

若要解決此限制,您可以將自訂程式碼加入至執行查詢時呼叫的方法。 如需詳細資訊,請參閱如何:使用程式碼擴充查詢的功能

您可以在程式碼中使用標準 LINQ 語法來定義篩選條件。 執行查詢時,您在設計工具中定義的條件會與您在程式碼中定義的條件合併,以產生查詢結果。

您在程式碼中定義的任何條件不會顯示為查詢設計工具中的篩選條件。 同樣的,您使用查詢設計工具加入的篩選條件也不會在方法中出現。 如果您要將參數加入至查詢,則只能使用查詢設計工具這樣做。 您使用查詢設計工具加入的參數會在方法的參數清單中出現。

使用查詢

您可以在畫面上使用查詢,或是在程式碼中執行查詢做為商務作業的一部分。

使用畫面中的查詢

您可以建立以自訂查詢為基礎的畫面 (例如,顯示位於美國之客戶的清單的畫面)。 如需詳細資訊,請參閱如何:建立 Silverlight 螢幕

您可以將多個查詢加入至畫面。 例如,您可以設計查詢,以顯示特定客戶的銷售訂單清單。 您可以將該查詢加入至 [客戶] 畫面。 然後您可以讓使用者選取客戶來檢視所有相關的銷售訂單。 如需如何完成這項工作的詳細資訊,請參閱 如何:為查詢參數提供值

使用程式碼中的查詢

您可以從應用程式的模型中擷取查詢,然後在程式碼中加以執行。 這可讓您在應用程式商務邏輯中使用資料的目標集合。 如需詳細資訊,請參閱如何:使用程式碼從查詢擷取資料

相關主題

標題

描述

如何:新增、移除和修改查詢

說明可在 Visual Studio LightSwitch UI 中加入查詢的位置。

如何:使用查詢設計工具設計查詢

說明如何使用視覺化設計工具來定義查詢的篩選條件、參數和排序條件。

如何:為查詢參數提供值

說明如何讓使用者能夠提供查詢參數的值。

如何:使用程式碼擴充查詢的功能

說明如何以超越設計工具功能的方式修改查詢。

如何:處理查詢事件

說明如何處理執行查詢之前和之後發生的事件。

如何:使用程式碼從查詢擷取資料

說明如何使用程式碼來擷取和執行查詢。

參考:查詢設計工具屬性

說明查詢及查詢項目的屬性。 您可以在 [屬性] 視窗中設定這些屬性的值。