1

我们有一种方法来获取人员。我们正在使用 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。我取出了,我又回到了 460。

4

1 回答 1

1

如果在 之后添加年份过滤器.Take(500),则过滤器将应用于这 500 人。您将必须创建第二种方法或修改现有方法以包含过滤器的参数,然后可以在调用之前应用该参数.Take(500)

我假设您的方法 return IQueryable<Person>,在这种情况下,应用在客户端上的过滤器基本上会产生如下结果:

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

如果您将方法修改为如下所示:

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

那么它应该可以工作。

以上代码未经测试。

于 2012-04-04T13:32:57.317 回答