C# 仅当不为null时才包含在where语句中
我有以下资料: 如果where语句不为空,如何在其中包含筛选器? 我尝试了以下操作,但始终得到0条记录C# 仅当不为null时才包含在where语句中,c#,entity-framework-core,C#,Entity Framework Core,我有以下资料: 如果where语句不为空,如何在其中包含筛选器? 我尝试了以下操作,但始终得到0条记录 public async Task<IList<UserRefDto>> GetUserRef(Dictionary<string, string> filter) { var iod = 549; // a test user who has 2548 records in db var favorites = filter.ContainsKey("fa
public async Task<IList<UserRefDto>> GetUserRef(Dictionary<string, string> filter) {
var iod = 549; // a test user who has 2548 records in db
var favorites = filter.ContainsKey("fav") ? filter["fav"].ConvertToGuid(",") : null;
var histories = filter.ContainsKey("his") ? filter["his"].ConvertToGuid(",") : null;
var orders = filter.ContainsKey("ord") ? filter["ord"].ConvertToGuid(",") : null;
var result = await context.UserRefernces
.Where(x =>
x.User_iod = iod
&& (favorites != null && favorites.Contains((Guid)x.FavId))
&& (histories != null && histories.Contains((Guid)x.HistoryId))
&& (orders != null && orders.Contains((Guid)x.OrderId))
)
.AsNoTracking()
.ToListAsync()
.ConfigureAwait(false);
return result;
}
公共异步任务GetUserRef(字典过滤器){
var iod=549;//在数据库中有2548条记录的测试用户
var favorites=filter.ContainsKey(“fav”)?filter[“fav”]。ConvertToGuid(“,”):null;
var histories=filter.ContainsKey(“his”)?filter[“his”]。ConvertToGuid(“,”):null;
var orders=filter.ContainsKey(“ord”)?filter[“ord”]。ConvertToGuid(“,”):null;
var result=await context.userreferences
.其中(x=>
x、 用户_iod=iod
&&(收藏夹!=null&&favorites.Contains((Guid)x.FavId))
&&(histories!=null&&histories.Contains((Guid)x.HistoryId))
&&(orders!=null&&orders.Contains((Guid)x.OrderId))
)
.AsNoTracking()
.ToListAsync()
.配置等待(错误);
返回结果;
}
编辑
注意:如果所有键都有值,那么我将返回记录,只有当一个或多个值为null时,我才从db中没有返回任何值您可以使用多个
.Where()
语句构建查询,这些语句将通过和
条件添加。但仅当值存在时,才添加附加的.Where()
语句
var query = context.UserRefernces
.Where(x => x.User_iod == iod);
if (favorites != null) {
query = query.Where(x => favorites.Contains((Guid)x.FavId));
}
// same for "histories" and "orders"
var result = await query
.AsNoTracking()
.ToListAsync()
.ConfigureAwait(false);
您可以使用多个
.Where()
语句构建查询,这些语句将通过和
条件添加。但仅当值存在时,才添加附加的.Where()
语句
var query = context.UserRefernces
.Where(x => x.User_iod == iod);
if (favorites != null) {
query = query.Where(x => favorites.Contains((Guid)x.FavId));
}
// same for "histories" and "orders"
var result = await query
.AsNoTracking()
.ToListAsync()
.ConfigureAwait(false);
替换
收藏夹!=null&
和收藏夹==null | |
在您的查询中,如下所示:
var result = await context.UserRefernces
.Where(x => x.User_iod = iod
&& (favorites == null || favorites.Contains((Guid)x.FavId))
&& (histories == null || histories.Contains((Guid)x.HistoryId))
&& (orders == null || orders.Contains((Guid)x.OrderId)))
.AsNoTracking()
.ToListAsync()
.ConfigureAwait(false);
return result;
现在查询将按预期工作。替换
收藏夹!=null&
和收藏夹==null | |
在您的查询中,如下所示:
var result = await context.UserRefernces
.Where(x => x.User_iod = iod
&& (favorites == null || favorites.Contains((Guid)x.FavId))
&& (histories == null || histories.Contains((Guid)x.HistoryId))
&& (orders == null || orders.Contains((Guid)x.OrderId)))
.AsNoTracking()
.ToListAsync()
.ConfigureAwait(false);
return result;
现在查询将按预期工作。您的(子)条件必须类似于
(field==null | | field.Contains(…)
。为什么要使用| |?我只在不为null的情况下包含它?@Maro这不是应该是=
而不是一个=
,x.User_iod=iod
你的(子)条件必须是(field==null | | field.Contains(…)
。为什么要使用| |?我只在不为空时才包含它?@Maro这不是应该是=
而不是一个=
,x.User_iod=iod