2013-05-14 100 views
1

我有一個列表視圖,並從該選擇LINQ查詢在代碼隱藏結合它相關關鍵詞設置where子句和使用LinqDataSource的參數,如LINQ查詢

MyDataContext dcxt = new MyDataContext(); 
string x = "searchword"; // i get x from user 
var query = from ak in dcxt.WordIndexes 
      where ak.Word == x 
      from a in ak.Keywords 
      where a.Comps.Approved && 
      a.Comps.Active && 
      a.Approved 
      orderby a.ETbm descending 
      select a; 

ListView1.DataSource = query; 
ListView1.DataBind(); 

我有WordIndexes -> Keywords之間的一個一對多關係, 也是Comps -> Keyswords之間的一對多。

現在我想使用linqdatasource,所以我可以讓linqdatasource處理分頁。但我不能設置這個linq查詢的where子句。

<asp:LinqDataSource ID="lds2" runat="server" 
    ContextTypeName="MyDataContext" EntityTypeName="" 
    OrderBy="" TableName="Keywords" 
    Where=""> 
</asp:LinqDataSource> 

我試圖使用datapager(沒有linqdatasource)進行分頁,但如果結果持有很多項目,它非常緩慢。我之前使用linqdatasource進行了更簡單的查詢,但由於表之間的關係,這對我來說有點複雜,我不知道從哪裏開始構建where子句。任何幫助?

更新:

我結束了使用LinqDataSourceSelectEvent與DataPager的建議一樣在回答

protected void linqDS_Selecting(object sender, LinqDataSourceSelectEventArgs e) 
{ 
    var query = from ak in dcxt.WordIndexes 
       where ak.Word == x 
       from a in ak.Keywords 
       where a.Comps.Approved && 
       a.Comps.Active && 
       a.Approved 
       orderby a.ETbm descending 
       select a; 

    e.Arguments.TotalRowCount = query.Count(); 
    e.Result = query.Skip(DataPager1.StartRowIndex).Take(DataPager1.PageSize); 
} 

回答

0

可以使用LinqDataSource_Selecting事件和傳遞查詢