簡體   English   中英

EF linq 基於bool參數查詢where條件

[英]EF linq query where condition based on bool parameter

我有一個 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;
    }

當您使用這種查詢時,當前版本會發出有用的警告:

如果集合導航的父實體為 null,則僅將其視為 null。使用“Any”檢查集合導航“YourEntity.YourNavigationColleciton”是否為空。

所以而不是

x.RoleIds != null

利用

x.RoleIds.Any()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM