LINQ - 如何忽略其中的空列表

Hen*_*ing 2 .net c# linq .net-core

这是我使用 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);
    }
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 5

处理它们为空的情况不是在查询中而是使用if

IEnumerable<Person> persons = _dbContext.Persons;
if(!string.IsNullOrEmpty(filterText))
{
    string lowerFilterText = filterText.ToLower();
    persons = persons
       .Where(p => p.firstName.ToLower().Contains(lowerFilterText) || a.lastName.ToLower().Contains(lowerFilterText));
}
if(departments.Any())
{
    persons = persons.Where(p => departments.Contains(p.department));
}
if(locations.Any())
{
    persons = persons.Where(p => locations.Contains(p.location));
}
List<Person> personList = persons.Skip(pageNumber * pageSize).Take(pageSize).ToList();
Run Code Online (Sandbox Code Playgroud)

由于 LINQ 的延迟执行,这只会在最终的ToList.