Linq to Entities Skip() and Take()

本文关键字:Take and Skip to Entities Linq | 更新日期: 2023-09-27 18:36:46

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

  • 如何递增 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();

Linq to Entities Skip() and 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);