我们有一种获取人的方法。我们正在使用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,我又回到了460.
答案 0 :(得分:1)
如果在.Take(500)
之后添加年度过滤器,则过滤器将应用于这500人。您必须创建第二个方法或修改现有方法以包含过滤器的参数,然后可以在调用.Take(500)
之前应用该参数。
我假设你的方法返回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);
}
然后它应该工作。
以上代码未经过测试。