如何在C# LINQ查询中处理多个可选过滤器?

dly7yett  于 2023-06-03  发布在  C#
关注(0)|答案(1)|浏览(210)

我试图创建一个GET方法与不同的可选过滤器,我想,如果任何过滤器是空的,它不过滤该字段。我有下面的代码,但如果它进入一个以上的地方,它不工作。如何解决我的问题?

public List<GetUserResponseDto> GetUsers(GetUserParametersDto parameters)
        {
            UserRepository userRepository = new(_context);
            IQueryable<User> query = userRepository.GetAll();

            if (parameters.Status?.Count > 0)
            {
                query = query.Where(p => parameters.Status.Contains(p.State)); 
            }

            if (!string.IsNullOrEmpty(parameters.Platform))
            {
                query = query.Where(p => string.Equals(p.Platform, parameters.Platform, StringComparison.OrdinalIgnoreCase));
            }

            if (!string.IsNullOrEmpty(parameters.IdentityCardNumber))
            {
                query = query.Where(p => string.Equals(p.IdentityCardNumber, parameters.IdentityCardNumber, StringComparison.OrdinalIgnoreCase));
            }

            return query.Select(GetUserResponseDtoMapper.FromUser).ToList(); 
        }

我试过在不同的地方做,但没有成功,我也试过创建一个动态 predicate ,但没有成功。

nzk0hqpo

nzk0hqpo1#

可以使用&&和||以合并过滤器。使用或使它们成为可选的,例如:

string filter1
string filter2

result = dataSource.Where(e =>
    (filter1 is null || e.Contains(filter1)) &&
    (filter2 is null || e.Contains(filter2))
    ).ToList();

这样行吗

相关问题