1

リストビューがあり、関連するキーワードを選択する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);
}
4

1 に答える 1

0

LinqDataSource_Selecting イベントを使用してクエリを渡すことができます

于 2013-05-14T21:20:31.207 に答える