![](/img/trans.png)
[英]How to use an Expression<Func<Model, bool>> in a Linq to EF where condition?
[英]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.