Linq to Entities Skip()和Take()

我正在开发一个ASP.NET应用程序,我正在创建一个LINQ查询,它将从db中选择分页记录。 在用户界面上我有一个列表框,用户可以在其中选择多个选项。 我想知道:

  • 如何增加Skip(),Take()参数以查看下一个结果?

  • 如何使用“IN”关键字,以便用户从列表框中选择多个选项时,查询是否可以检查所有值?

我的查询如下所示:

var searchResults = context.data_vault.Where(d => d.STATE == lstStates.SelectedItem.Text).OrderBy(d= > d.dv_id).Take(10).Skip(2); GridView1.DataSource = searchResults; GridView1.DataBind(); 

我认为你正在使用Skip错误。 它应该在Take之前。

跳过多个记录,因此对于第一页,传入0,否则传递(页码 – 1)*每页*记录。

我通常做这样的事情:

 int Page = 1; int RecordsPerPage = 10; var q = yourQuery.Skip((Page - 1) * RecordsPerPage).Take(RecordsPerPage); 

您需要先在GridView上打开分页。 然后在PageIndexChanging事件:

 var result = db.Where(...) .Skip(e.NewPageIndex * grid.PageSize) .Take(grid.PageSize) .ToList(); // this is very important part too 

要模拟IN行为:

 var selection = list.SelectedItems.Select(i => i.Text).ToArray(); var result = db.Where(x => selection.Contains(x.Prop)); 

试试这个:

  int temp = (CurrentPageNumber - 1) * 10; var searchResults = context.data_vault.Where(d => d.STATE == lstStates.SelectedItem.Text).OrderBy(d= > d.dv_id).Skip(temp).Take(10);