gpt4 book ai didi

c# - LINQ - 如何忽略 where 中的空列表

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:37 24 4
gpt4 key购买 nike

这些是我使用 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);
}

最佳答案

处理它们不是在查询中而是在 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();

由于 LINQ 的延迟执行,这将只在最后一次 ToList 处执行最后一次查询。 .

关于c# - LINQ - 如何忽略 where 中的空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57805581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com