2011-03-04 87 views
0

問候,我有一個以下問題。假設其中有兩個表中的數據庫:加速LinqDataSource

Clients(
    id, 
    name, 
    address) 

Orders(
    id, 
    name, 
    desc, 
    datemodified, 
    client_id) 

第二個引用的第一個,即每個訂單分配給客戶端。現在假設我有一個.aspx頁面與的LinqDataSource的訂單表,使用該數據源,並顯示一個表有以下幾列一個GridView:

  1. 訂單名稱。
  2. 訂單描述
  3. 客戶名稱。
  4. 客戶地址。

據我所知,Linq to SQL的設計方式是,默認情況下它不會加載任何關聯的實體,只有在請求子屬性時纔會這樣做。因此,加載頁面時,會發生以下情況:

  1. 第一個查詢將從訂單表中檢索記錄。
  2. 對於由GridView顯示的每一行,當請求一個客戶端屬性時將執行額外的查詢。

因此,如果我們有100個訂單,這意味着將執行101個查詢而不是1個(或者甚至可能201個,如果對每個客戶端屬性執行查詢)?如何避免這種情況,並使LinqDataSource通過單個查詢加載所有必填字段?

現在我看到了這個問題的唯一解決方法 - 使用一個帶連接查詢的SqlDataSource,它將一次檢索所有必填字段。

回答

0

您可以覆蓋的LinqDataSource的OnSelecting事件有它檢索匿名類型與準確的數據,你正在尋找:

protected void LinqDataSource_OnSelecting(object sender, LinqDataSourceSelectEventArgs e) 
{ 
    DataContext dc = new DataContext(); 
    var query = from o in dc.Orders 
       select new 
       { 
        OrderName = o.name, 
        OrderDesc = o.desc, 
        ClientName = o.Client.name, 
        ClientAddress = o.Client.address 
       }; 
    // Insert any necessary conditional statements adjustments as needed. 

    e.Result = query; 
} 

查詢就會發送到數據庫會搶只有這四個領域,並使用內部聯接來完成,因此您只能爲每行檢索一次數據。

+0

這是否會影響更新和刪除網格視圖操作?如果我以這種方式切換數據源,LinqDataSource將如何執行更新和刪除請求? –