Linq to Entities Skip() and Take()
Solution 1
I think you are using Skip incorrectly. It should be before the Take.
Skip skips a number of records, so for your first page, pass in 0, else pass in the (page number - 1) * records per page.
I usually do something like this:
int Page = 1;
int RecordsPerPage = 10;
var q = yourQuery.Skip((Page - 1) * RecordsPerPage).Take(RecordsPerPage);
Solution 2
You need to turn paging on the GridView first. Then on PageIndexChanging
event:
var result = db.Where(...)
.Skip(e.NewPageIndex * grid.PageSize)
.Take(grid.PageSize)
.ToList(); // this is very important part too
To emulate IN
behavior:
var selection = list.SelectedItems.Select(i => i.Text).ToArray();
var result = db.Where(x => selection.Contains(x.Prop));
Solution 3
Try this:
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);
DotnetSparrow
I am working as asp.net freelance developer at eteksol. I have 7+ years of experience in asp.net/asp.net MVC/C#/SQl server.
Updated on June 09, 2020Comments
-
DotnetSparrow almost 4 years
I am working on an ASP.NET application and I am creating a LINQ query which will select paginated records from db. on user interface I have a listbox where user can select multiple choices. I want to know:
How can I increment Skip(), Take() parameters to view next results ?
How can I use "IN" key word so that if user selects multiple options from listbox, query can check all values ?
My query looks like this:
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();