Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅当不为null时才包含在where语句中_C#_Entity Framework Core - Fatal编程技术网

C# 仅当不为null时才包含在where语句中

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

我有以下资料:

如果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("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