【发布时间】:2020-01-08 08:41:11
【问题描述】:
这是我使用 LINQ 的第一步。我有两个过滤器列表作为参数,也可以为空。如果我以这种方式执行代码,我不会从空列表中获取任何值。
如果要忽略空列表,代码应该是什么样的?
public List<PersonDTO> GetPersons(int pageNumber, int pageSize, List<string> departments, List<string> locations, string filterText)
{
if (filterText == null)
{
filterText = "";
}
List<Person> personsList = _dbContext.Persons
.Where(a => (a.firstName.ToLower().Contains(filterText.ToLower()) || a.lastName.ToLower().Contains(filterText.ToLower()))
&& departments.Contains(a.department)
&& locations.Contains(a.location))
.Skip(pageNumber * pageSize).Take(pageSize).ToList();
return _mapper.Map<List<PersonDTO>>(personsList);
}
【问题讨论】:
-
删除
&& departments.Contains(a.department)。将Where的返回值分配给一个临时变量。检查departments的Count。如果它不是零 - 使用tempVariable = tempVariable.Where(z => departments.Contains(z.department)。起泡、冲洗、重复(locations)。然后稍后在 temp 变量上调用Skip。 -
你能用 Linq 发布一个minimal reproducible example 来反对,或者甚至用好的旧循环吗?
-
可以添加更多测试用例吗?