1

People を取得する方法があります。EF と Ria サービスを使用しています。今のやり方で GetPeople を呼び出すと、ある状況 (例) では 920 人が返されます。このすべての情報でグリッドを埋めます。アプリが成長しているので、これに上限を 500 に設定することにしました。同様に使用できる一連のフィルターがあります。年もその一つです。したがって、検索に 2012 年のフィルターを適用すると、460 人が返されます。私たちのコードはこれから

return _personSearchRepository.All().Where(x => x.ProgramID == programID && x.PersonType == "Person");

return _personSearchRepository.All().Where(x => x.ProgramID == programID && x.PersonType == "Person").Take(500);

Take(500) を追加しました - 問題は、このコードを追加したとき、フィルタなしの最初の検索で 500 人が返されたことです - ここでは問題ありません。しかし、年フィルターを追加すると、460 が返されると予想されていましたが、79 になりました。Take Out を取り、460 に戻りました。

4

1 に答える 1

1

If you add the year filter after the .Take(500), then the filter is applied to those 500 persons. You will have to create a second method or modify the existing one to include a parameter for the filter, which can then be applied before you call .Take(500).

I assume that your methods return IQueryable<Person>, in which case a filter applied on the client will basically result in something like this:

_personSearchRepository.All().Where(x => x.ProgramID == programID 
      && x.PersonType == "Person")
   .Take(500).Where(x => x.CreatedYear = 2012);

If you modify the method to look like this:

IQueryable<Person> GetPersonsWithYearFilter(int year)
{
    return _personSearchRepository.All().Where(x => x.ProgramID == programID 
          && x.PersonType == "Person" && x.CreatedYear = year)
       .Take(500);
}

then it should work.

The above code is not tested.

于 2012-04-04T13:32:57.317 に答える