EF linq查询基于bool参数的where条件

k4ymrczo  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(198)

我有一个EF linq查询,我想基于true/false参数设置where条件。我可以在SQL中做类似的事情,这在某种程度上是我写EF查询的方式,但它似乎不适用于EF Core。
当我期望执行的SQL时,如果我传递"activeOnly = true",则没有应用条件的SQL,当我传递"activeOnly = false"时,则条件为"where 0 = 1"。
显然我错了,但我想不出正确的方法来做这件事?或者如果可能的话?

public async Task<List<UserDto>> GetUsersAsync(string region, bool activeOnly)
    {
        var allUsers = new List<UserDto>();
        var countries = _configuration.GetRegionConfiguration(region).Countries;

        foreach (var country in countries)
        {
            _context.ChangeConnectionString(country.DatabaseConnectionString);
            
            var users = await _context.User
                .ProjectTo<UserDto>(_mapper.ConfigurationProvider)
                .Where(x => (activeOnly && (x.RoleIds != null)) || (!activeOnly && (x.RoleIds == null)))
                .ToListAsync();
            
            allUsers.AddRange(users);
        }

        allUsers.OrderBy(x => x.FullName);
        return allUsers;
    }
x759pob2

x759pob21#

当前版本在您使用此类查询时会发出有用的警告:
仅当集合导航父实体为Null时,集合导航才被视为Null请使用'Any'检查集合导航'YourEntity.YourNavigationColleciton'是否为空
所以与其

x.RoleIds != null

使用了

x.RoleIds.Any()

相关问题