按一下以給予評分及指教

  開啟低頻寬檢視
.NET Framework 類別庫
LinqDataSource 類別

更新:2007 年 11 月

在 ASP.NET Web 網頁中透過標記文字啟用 Language-Integrated Query (LINQ),以從資料物件擷取和修改資料。

命名空間:  System.Web.UI.WebControls
組件:  System.Web.Extensions (在 System.Web.Extensions.dll 中)

Visual Basic (宣告)
<ToolboxBitmapAttribute(GetType(LinqDataSource), "LinqDataSource.ico")> _
<AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level := AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level := AspNetHostingPermissionLevel.Minimal)> _
Public Class LinqDataSource _
    Inherits DataSourceControl
Visual Basic (使用方式)
Dim instance As LinqDataSource
C#
[ToolboxBitmapAttribute(typeof(LinqDataSource), "LinqDataSource.ico")]
[AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public class LinqDataSource : DataSourceControl
Visual C++
[ToolboxBitmapAttribute(typeof(LinqDataSource), L"LinqDataSource.ico")]
[AspNetHostingPermissionAttribute(SecurityAction::LinkDemand, Level = AspNetHostingPermissionLevel::Minimal)]
[AspNetHostingPermissionAttribute(SecurityAction::InheritanceDemand, Level = AspNetHostingPermissionLevel::Minimal)]
public ref class LinqDataSource : public DataSourceControl
J#
/** @attribute ToolboxBitmapAttribute(LinqDataSource, "LinqDataSource.ico") */
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal) */
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal) */
public class LinqDataSource extends DataSourceControl
JScript
public class LinqDataSource extends DataSourceControl
ASP.NET
<asp:LinqDataSource />

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 控制項會以下列順序套用資料作業:

  1. Where (指定要傳回的資料錄)。

  2. Order By (排序)。

  3. Group By (彙總共用值的資料錄)。

  4. Order Groups By (排序分組的資料)。

  5. Select (指定要傳回的欄位或屬性)。

  6. Auto-sort (依使用者所選取的屬性對資料錄進行排序)。

  7. Auto-page (擷取使用者所選取之資料錄的子集)。

您可以將條件加入至 Where 屬性,來篩選從查詢傳回的資料錄。如果未設定 Where 屬性,LinqDataSource 控制項會從資料物件擷取每一筆資料錄。

您可以使用 OrderBy 屬性指定傳回之資料的屬性名稱,以做為排序依據。

注意事項:

如果將 LinqDataSource 控制項與 SQL Server 2000 或 SQL Server Compact 3.5 搭配使用,並且 AutoPage 屬性設定為 true,則必須提供 OrderBy 屬性的值。根據預設,AutoPage 屬性為 true。如果指派值給 Select 屬性,則還必須將所有識別 (Identity) 資料行包含在查詢所傳回的屬性清單中。

您可以使用 GroupBy 屬性指定用於合併彙算值相同之資料錄的屬性。當您將資料分組時,可以在 Select 屬性中包含 KeyIt,它們是動態建立的屬性。Key 屬性表示用於將資料分組之一個或多個屬性的值。例如,如果依名為 Category 的屬性進行分組,則 Key 屬性將包含 Category 屬性中所有不重覆的值。It 屬性表示資料群組中個別資料錄的集合。您可以反覆查看 It 屬性,以擷取分組作業中已合併彙算的個別資料錄。例如,如果依名為 Category 的屬性進行分組,則 It 屬性將包含共用 Category 屬性中通用值的所有個別資料錄。

您可以使用 OrderGroupsBy 屬性,指定要使用哪些屬性來排序分組的資料。分組資料時,OrderBy 屬性會指定分組資料中個別資料錄的排序方式。

根據預設,LinqDataSource 控制項會從資料物件擷取所有屬性的值。您可以使用 Select 屬性,指定在您要使用可用屬性的子集時要傳回的屬性。Select 作業在 Where、Order By 和 Group By 作業之後套用。因此,如果在 Select 子句中建立別名,則該別名在其他子句中無法使用。

您可以指定是否要使用 EnableDeleteEnableInsertEnableUpdate 屬性來啟用資料修改。用於從 LinqDataSource 控制項修改資料的使用者介面,通常透過資料繫結控制項 (例如 DetailsView 控制項) 提供。除了要將 EnableDeleteEnableInsertEnableUpdate 設定為 true 之外,還需要滿足下列條件才能啟用自動資料修改:

您可以採用兩種方式來限制資料繫結控制項中所顯示的屬性。您可以將 Select 屬性設定為屬性的子集,也可以透過加入 DataControlField 控制項來定義資料繫結控制項的欄位。但是,如果設定 Select 屬性,則意味著無法啟用自動更新、插入和刪除作業。如果想要在使用可用屬性之子集的同時啟用自動資料修改,請不要設定 Select 屬性,而改為從資料物件擷取所有屬性,並使用資料繫結控制項來管理要顯示的屬性。當使用 DetailsView 控制項或 GridView 控制項時,還必須將 AutoGenerateRowsAutoGenerateColumns 屬性設定為 false。此舉可防止資料繫結控制項自動包含用於編輯和刪除資料的按鈕。未顯示在資料繫結控制項中的任何值都將在檢視狀態中進行儲存。當執行資料更新時,這些值會毫無變更地傳遞至資料來源。

如果在執行階段必須評估值,以便對這些值進行排序、篩選或分組,則您可以將參數加入至 WhereParametersGroupByParametersOrderGroupsByParametersOrderByParameters 集合。

如果想要指定空字串值的處理方式,或想要提供預設值,您可以將參數加入至 InsertParametersUpdateParametersDeleteParametersSelectParameters 集合。

如果想要先檢查或修改值,然後再執行資料作業,則可以處理 DeletingInsertingSelectingUpdating 事件。您也可以處理這些事件以取消資料作業,或檢查當您根據使用者輸入的資料來設定資料類別 (Class) 中的屬性時所發生的驗證錯誤。

若要在完成資料作業後檢查值,可以處理 DeletedInsertedSelectedUpdated 事件。

您可以建立 Selecting 事件的事件處理常式,使用 LinqDataSource 控制項從預存程序 (Stored Procedure) 中擷取資料。在事件處理常式中,您可以呼叫表示預存程序的資料內容類別中的方法,並將結果設定為 LinqDataSourceSelectEventArgs 物件的 Result 屬性。如果想要啟用資料的自動更新、插入和刪除作業,則方法傳回的型別必須符合 TableName 屬性中指定的型別。如需建立資料內容方法的詳細資訊,請參閱 HOW TO:建立對應到預存程序和函式的 DataContext 方法 (O/R 設計工具)

在下列範例中,會說明 LinqDataSource 控制項的用法,該控制項從名為 Products 的實體類別擷取資料。該實體類別可能已透過使用 O/R 設計工具或 SqlMetal.exe 公用程式產生。Where 屬性設定為僅傳回 Price 屬性中值大於 50 的資料錄。GridView 控制項會繫結至 LinqDataSource 控制項,以顯示資料。

Visual Basic
<asp:LinqDataSource 
    ContextTypeName="ExampleDataContext" 
    TableName="Products" 
    Where="Price > 50"
    ID="LinqDataSource1" 
    runat="server">
</asp:LinqDataSource>
<asp:GridView 
    DataSourceID="LinqDataSource1"
    ID="GridView1" 
    runat="server">
</asp:GridView>

C#
<asp:LinqDataSource 
    ContextTypeName="ExampleDataContext" 
    TableName="Products" 
    Where="Price > 50"
    ID="LinqDataSource1" 
    runat="server">
</asp:LinqDataSource>
<asp:GridView 
    DataSourceID="LinqDataSource1"
    ID="GridView1" 
    runat="server">
</asp:GridView>

下列範例顯示 LinqDataSource 控制項,該控制項可讓使用者更新和刪除資料來源中的資料錄,以及將資料錄插入至資料來源中。DetailsView 控制項繫結至 LinqDataSource 控制項,可讓使用者查看和修改資料。請注意,選取、更新、刪除或插入資料錄不需要任何 SQL 命令。

Visual Basic
<asp:LinqDataSource 
    ContextTypeName="ExampleDataContext" 
    TableName="Products" 
    EnableUpdate="true"
    EnableInsert="true"
    EnableDelete="true"
    ID="LinqDataSource1" 
    runat="server">
</asp:LinqDataSource>
<asp:DetailsView 
    DataKeyNames="ProductID"
    AutoGenerateEditButton="true"
    AutoGenerateDeleteButton="true"
    AutoGenerateInsertButton="true"
    AllowPaging="true"
    DataSourceID="LinqDataSource1"
    ID="GridView1" 
    runat="server">
</asp:DetailsView>

C#
<asp:LinqDataSource 
    ContextTypeName="ExampleDataContext" 
    TableName="Products" 
    EnableUpdate="true"
    EnableInsert="true"
    EnableDelete="true"
    ID="LinqDataSource1" 
    runat="server">
</asp:LinqDataSource>
<asp:DetailsView 
    DataKeyNames="ProductID"
    AutoGenerateEditButton="true"
    AutoGenerateDeleteButton="true"
    AutoGenerateInsertButton="true"
    AllowPaging="true"
    DataSourceID="LinqDataSource1"
    ID="GridView1" 
    runat="server">
</asp:DetailsView>

下列範例顯示 Selecting 事件的事件處理常式,該事件可根據 Web 網頁中的值設定資料物件。

Visual Basic
Partial Class Default3
    Inherits System.Web.UI.Page

    Dim cities() As String = _
    { _
        "Atlanta", _
        "Charlotte", _
        "Denver", _
        "New York", _
        "San Francisco" _
    }


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    End Sub


    Protected Sub LinqDataSource1_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.LinqDataSourceSelectEventArgs) Handles LinqDataSource1.Selecting
        e.Result = cities
    End Sub

End Class

C#
public partial class Default3 : System.Web.UI.Page
{
    string[] cities = 
    { 
        "Atlanta", 
        "Charlotte", 
        "Denver", 
        "New York", 
        "San Francisco" 
    };

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void LinqDataSource_Selecting(object sender, LinqDataSourceSelectEventArgs e)
    {
        e.Result = cities;
    }
}

下列範例顯示 LinqDataSource 控制項,該控制項設定為依兩個資料行進行分組。Key 屬性所參考的物件具有兩個屬性:ProductCategoryColor。由 It 表示的物件重新命名 (別名) 為 Products。重新命名的 Products 物件包含群組之個別資料錄的集合。每個執行個體都將包含 Products 資料表中的所有資料行。

Visual Basic
<asp:LinqDataSource 
  ContextTypeName="ExampleDataContext" 
  TableName="Products" 
  GroupBy="new(ProductCategory, Color)"
  Select="new(Key,
          It As Products,
          Max(ListPrice) As MaxListPrice, 
          Min(ListPrice) As MinListPrice)"
  ID="LinqDataSource1" 
  runat="server">
</asp:LinqDataSource>

C#
<asp:LinqDataSource 
  ContextTypeName="ExampleDataContext" 
  TableName="Products" 
  GroupBy="new(ProductCategory, Color)"
  Select="new(Key,
          It As Products,
          Max(ListPrice) As MaxListPrice, 
          Min(ListPrice) As MinListPrice)"
  ID="LinqDataSource1" 
  runat="server">
</asp:LinqDataSource>

下列範例顯示兩個 ListView 控制項,這兩個控制項顯示前一個範例中 LinqDataSource 控制項中的資料。其中一個 ListView 控制項顯示分組的資料,另一個 ListView 控制項則顯示屬於該群組之產品的各個名稱。巢狀資料繫結控制項的 DataSource 屬性設定為 Products,該屬性值是 It 物件的別名。

Visual Basic
<asp:ListView 
   DataSourceID="LinqDataSource1" 
   ID="ListView1" runat="server">

   <LayoutTemplate>
     <table id="Table1" 
         style="background-color:Teal;color:White" 
         runat="server" 
         class="Layout">

       <thead>
         <tr>
           <th><b>Product Category</b></th>
           <th><b>Color</b></th>
           <th><b>Highest Price</b></th>
           <th><b>Lowest Price</b></th>
         </tr>
       </thead>
       <tr runat="server" id="itemPlaceholder">
       </tr>

     </table>
   </LayoutTemplate>

   <ItemTemplate>
     <tr>
       <td><%# Eval("key.ProductCategory") %></td>
       <td><%# Eval("key.Color") %></td>
       <td><%# Eval("MaxListPrice") %></td>
       <td><%# Eval("MinListPrice") %></td>
     </tr>
     <tr>

       <td colspan="4" style="width:100%;background-color:White;color:Black">
         <asp:ListView 
           DataSource='<%# Eval("Products") %>' 
           runat="server" 
           ID="ListView2">

           <LayoutTemplate>
             <div runat="server" id="itemPlaceholder" />
           </LayoutTemplate>

           <ItemTemplate>
             <%# Eval("ProductName") %><br />
           </ItemTemplate>

         </asp:ListView> 
       </td>
     </tr>
   </ItemTemplate>
 </asp:ListView>

C#
<asp:ListView 
    DataSourceID="LinqDataSource1" 
    ID="ListView1" runat="server">

    <LayoutTemplate>
      <table id="Table1" 
          style="background-color:Teal;color:White" 
          runat="server" 
          class="Layout">

        <thead>
          <tr>
            <th><b>Product Category</b></th>
            <th><b>Color</b></th>
            <th><b>Highest Price</b></th>
            <th><b>Lowest Price</b></th>
          </tr>
        </thead>
        <tr runat="server" id="itemPlaceholder">
        </tr>

      </table>
    </LayoutTemplate>

    <ItemTemplate>
      <tr>
        <td><%# Eval("key.ProductCategory") %></td>
        <td><%# Eval("key.Color") %></td>
        <td><%# Eval("MaxListPrice") %></td>
        <td><%# Eval("MinListPrice") %></td>
      </tr>
      <tr>

        <td colspan="4" style="width:100%;background-color:White;color:Black">
          <asp:ListView 
            DataSource='<%# Eval("Products") %>' 
            runat="server" 
            ID="ListView2">

            <LayoutTemplate>
              <div runat="server" id="itemPlaceholder" />
            </LayoutTemplate>

            <ItemTemplate>
              <%# Eval("ProductName") %><br />
            </ItemTemplate>

          </asp:ListView> 
        </td>
      </tr>
    </ItemTemplate>
  </asp:ListView>

System..::.Object
  System.Web.UI..::.Control
    System.Web.UI..::.DataSourceControl
      System.Web.UI.WebControls..::.LinqDataSource
這個型別的任何 Public static (在 Visual Basic 中為 Shared) 成員都具備執行緒安全。並非所有的執行個體成員都是安全執行緒。

Windows Vista, Windows XP SP2, Windows Server 2003

.NET Framework 和 .NET Compact Framework 並不支援各種平台的所有版本。如需支援平台版本的相關資訊,請參閱 .NET Framework 系統需求

.NET Framework

支援版本:3.5
社群內容   什麼是社群內容?
新增內容 RSS  註解
Processing
© 2009 Microsoft Corporation. 著作權所有,並保留一切權利。 使用規定  |  商標  |  隱私權聲明
Page view tracker