Language-Integrated Query (LINQ) 是一種查詢語法,其所定義的一組查詢運算子允許在任何 .NET 架構的程式語言中以宣告方式表達周遊、篩選和投影作業。資料物件可以是記憶體中資料集合,也可以是表示資料庫中資料的物件。您可以擷取或修改資料,而不必針對每項操作都撰寫 SQL 命令。
藉由在標記文字中設定一些屬性,LinqDataSource 控制項可讓您在 ASP.NET Web 網頁中使用 LINQ。LinqDataSource 控制項使用 LINQ to SQL 來自動產生資料命令。如需 LINQ to SQL 的詳細資訊,請參閱 LINQ to SQL。
當從記憶體中資料集合擷取資料時,請將 ContextTypeName 屬性設定為包含資料集合的類別。將 TableName 屬性設定為傳回資料集合的屬性或欄位。例如,您可能有名為 Person 的類別,該類別包含名為 FavoriteCities 的屬性,該屬性會傳回字串值陣列。在這種情況下,請將 ContextTypeName 屬性設定為 Person,並將 TableName 屬性設定為 FavoriteCities。
當您查詢資料庫時,必須先建立代表該資料庫及其資料表的實體類別。您可以使用 物件關聯式設計工具或 SqlMetal.exe 公用程式來產生這些類別。然後將 ContextTypeName 屬性設定為表示該資料庫的類別,並將 TableName 屬性設定為表示該資料庫資料表的屬性。
LinqDataSource 控制項會以下列順序套用資料作業:
Where (指定要傳回的資料錄)。
Order By (排序)。
Group By (彙總共用值的資料錄)。
Order Groups By (排序分組的資料)。
Select (指定要傳回的欄位或屬性)。
Auto-sort (依使用者所選取的屬性對資料錄進行排序)。
Auto-page (擷取使用者所選取之資料錄的子集)。
您可以將條件加入至 Where 屬性,來篩選從查詢傳回的資料錄。如果未設定 Where 屬性,LinqDataSource 控制項會從資料物件擷取每一筆資料錄。
您可以使用 OrderBy 屬性指定傳回之資料的屬性名稱,以做為排序依據。
注意事項: |
|---|
如果將 LinqDataSource 控制項與 SQL Server 2000 或 SQL Server Compact 3.5 搭配使用,並且 AutoPage 屬性設定為 true,則必須提供 OrderBy 屬性的值。根據預設,AutoPage 屬性為 true。如果指派值給 Select 屬性,則還必須將所有識別 (Identity) 資料行包含在查詢所傳回的屬性清單中。 |
您可以使用 GroupBy 屬性指定用於合併彙算值相同之資料錄的屬性。當您將資料分組時,可以在 Select 屬性中包含 Key 和 It,它們是動態建立的屬性。Key 屬性表示用於將資料分組之一個或多個屬性的值。例如,如果依名為 Category 的屬性進行分組,則 Key 屬性將包含 Category 屬性中所有不重覆的值。It 屬性表示資料群組中個別資料錄的集合。您可以反覆查看 It 屬性,以擷取分組作業中已合併彙算的個別資料錄。例如,如果依名為 Category 的屬性進行分組,則 It 屬性將包含共用 Category 屬性中通用值的所有個別資料錄。
您可以使用 OrderGroupsBy 屬性,指定要使用哪些屬性來排序分組的資料。分組資料時,OrderBy 屬性會指定分組資料中個別資料錄的排序方式。
根據預設,LinqDataSource 控制項會從資料物件擷取所有屬性的值。您可以使用 Select 屬性,指定在您要使用可用屬性的子集時要傳回的屬性。Select 作業在 Where、Order By 和 Group By 作業之後套用。因此,如果在 Select 子句中建立別名,則該別名在其他子句中無法使用。
您可以指定是否要使用 EnableDelete、EnableInsert 和 EnableUpdate 屬性來啟用資料修改。用於從 LinqDataSource 控制項修改資料的使用者介面,通常透過資料繫結控制項 (例如 DetailsView 控制項) 提供。除了要將 EnableDelete、EnableInsert 或 EnableUpdate 設定為 true 之外,還需要滿足下列條件才能啟用自動資料修改:
您可以採用兩種方式來限制資料繫結控制項中所顯示的屬性。您可以將 Select 屬性設定為屬性的子集,也可以透過加入 DataControlField 控制項來定義資料繫結控制項的欄位。但是,如果設定 Select 屬性,則意味著無法啟用自動更新、插入和刪除作業。如果想要在使用可用屬性之子集的同時啟用自動資料修改,請不要設定 Select 屬性,而改為從資料物件擷取所有屬性,並使用資料繫結控制項來管理要顯示的屬性。當使用 DetailsView 控制項或 GridView 控制項時,還必須將 AutoGenerateRows 或 AutoGenerateColumns 屬性設定為 false。此舉可防止資料繫結控制項自動包含用於編輯和刪除資料的按鈕。未顯示在資料繫結控制項中的任何值都將在檢視狀態中進行儲存。當執行資料更新時,這些值會毫無變更地傳遞至資料來源。
如果在執行階段必須評估值,以便對這些值進行排序、篩選或分組,則您可以將參數加入至 WhereParameters、GroupByParameters、OrderGroupsByParameters 或 OrderByParameters 集合。
如果想要指定空字串值的處理方式,或想要提供預設值,您可以將參數加入至 InsertParameters、UpdateParameters、DeleteParameters 或 SelectParameters 集合。
如果想要先檢查或修改值,然後再執行資料作業,則可以處理 Deleting、Inserting、Selecting 或 Updating 事件。您也可以處理這些事件以取消資料作業,或檢查當您根據使用者輸入的資料來設定資料類別 (Class) 中的屬性時所發生的驗證錯誤。
若要在完成資料作業後檢查值,可以處理 Deleted、Inserted、Selected 或 Updated 事件。
您可以建立 Selecting 事件的事件處理常式,使用 LinqDataSource 控制項從預存程序 (Stored Procedure) 中擷取資料。在事件處理常式中,您可以呼叫表示預存程序的資料內容類別中的方法,並將結果設定為 LinqDataSourceSelectEventArgs 物件的 Result 屬性。如果想要啟用資料的自動更新、插入和刪除作業,則方法傳回的型別必須符合 TableName 屬性中指定的型別。如需建立資料內容方法的詳細資訊,請參閱 HOW TO:建立對應到預存程序和函式的 DataContext 方法 (O/R 設計工具)。