C# int[]的实体框架核心不兼容。Any(…) 处境

C# int[]的实体框架核心不兼容。Any(…) 处境,c#,entity-framework-core,C#,Entity Framework Core,我目前面临的情况是,我从.Net Framework迁移到了.Net Core,并且随着变化,我也迁移到了Entity Framework Core 5.0 我的代码中有很多点使用实体框架,如下所示: int[] groupids = ...; IQueryable<User> query = dbContext.Users; if (groupids.Any()) { // ParentFK is int? query = query.Where((it) =&

我目前面临的情况是,我从.Net Framework迁移到了.Net Core,并且随着变化,我也迁移到了Entity Framework Core 5.0

我的代码中有很多点使用实体框架,如下所示:

int[] groupids = ...;

IQueryable<User> query = dbContext.Users;

if (groupids.Any())
{
    // ParentFK is int?
    query = query.Where((it) => groupids.Any((id) => it.ParentFK == id)); 
}
int[]groupids=。。。;
IQueryable query=dbContext.Users;
if(groupids.Any())
{
//ParentFK是int?
query=query.Where((it)=>groupids.Any((id)=>it.ParentFK==id));
}
Any(Func)
中的实际代码也可能更复杂,因此用
Contains(…)
替换它并不是每个可能的点都可以选择的

更改也没有列在可能的不兼容列表中,这让我也有点惊讶

问题: 为什么会掉下来?有什么简单的方法可以让它重新融合吗

实际错误消息 系统无效操作异常:
'LINQ表达式'DbSet()
.Where(p=> .Any(id=>p.ParentFK==(可空)id))'无法翻译。
或者以可以翻译的形式重写查询, 或者通过插入对“AsEnumerable”、“ASASASyncEnumerable”、“ToList”或“ToListSync”的调用,显式切换到客户端评估。 有关更多信息,请参阅


无法在服务器端执行此查询EF会生成一个警告,但是在客户端执行这个条件,这就是它工作的原因。 但是EFCore会生成一个错误,您应该显式执行查询的可翻译部分,然后在客户端执行查询的LINQ to objects部分

int[] groupids = ...;

IQueryable<User> query = dbContext.Users;

if (groupids.Any())
{
    var partialResult = query.ToArray(); // get data from DB
    
    // and filter on client side
    var result = partialResult.Where((it) => groupids.Any((id) => it.ParentFK == id)); 
}
int[]groupids=。。。;
IQueryable query=dbContext.Users;
if(groupids.Any())
{
var partialResult=query.ToArray();//从数据库获取数据
//并在客户端进行过滤
var result=partialResult.Where((it)=>groupids.Any((id)=>it.ParentFK==id));
}

注意对于以下情况:Any(Func)中的实际代码可能也更复杂,因此用Contains(…)替换它并不是每个可能的点的真正选项

这种不兼容是如何表现出来的?query.where()是一种捕获其主体的野生类型,我想知道您在.Any()太复杂,无法编译为SQL。请尝试
groupids.Contains(it.ParentFK)
您应该做的工作。@Joshua来自实体框架,这在之前工作得很好,并编译(至少在本例中)为与
Contains
相同的代码,这就是为什么决定在
array.Contains()上使用LINQ
Any()
,只是为了避免有人随机遇到这种不兼容。其他点包括执行例如(EF6)
query.Where((q)=>likeStrings.Any((likeExpression)=>DbFunction.Like(likeExpression,query))
,扩展到有效的SQLID。虽然这是
groupID
@AluanHaddad的一个选项,但代码中的许多点并不像这里那样“简单”地改变。更新了问题,以包含关于真实问题的更多信息,因为之前没有。无论如何,感谢您的输入:)