リストビューがあり、関連するキーワードを選択する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();
私は の間に 1 対多の関係があり、 の間WordIndexes -> Keywords
にも 1対多の関係があり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);
}