我有一个列表视图并将其绑定在代码隐藏中,来自一个选择相关关键字的 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);
}