9

私は ASP.NET アプリケーションに取り組んでおり、db からページ分割されたレコードを選択する 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();
4

3 に答える 3

22

Skip の使い方が間違っていると思います。テイクの前にある必要があります。

Skip は多数のレコードをスキップするため、最初のページには 0 を渡し、それ以外の場合は (ページ番号 - 1) * ページあたりのレコードを渡します。

私は通常、次のようなことをします:

int Page = 1;
int RecordsPerPage = 10;
var q = yourQuery.Skip((Page - 1) * RecordsPerPage).Take(RecordsPerPage);
于 2012-06-08T14:13:46.143 に答える
7

最初に 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));
于 2012-06-08T14:09:05.593 に答える
1

これを試して:

   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);
于 2012-06-08T14:17:02.620 に答える