Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 实体框架核心3.1匿名投影现在不能用于Linq include语句?_C#_Entity Framework_Linq_.net Core 3.1_Entity Framework Core 3.1 - Fatal编程技术网

C# 实体框架核心3.1匿名投影现在不能用于Linq include语句?

C# 实体框架核心3.1匿名投影现在不能用于Linq include语句?,c#,entity-framework,linq,.net-core-3.1,entity-framework-core-3.1,C#,Entity Framework,Linq,.net Core 3.1,Entity Framework Core 3.1,所以我从版本4开始就一直在使用实体框架,最近在我正在做的一个项目中进行了一些突破性的更改。我只想说,在EF core 3.1.2(即EF core 2.2.6)的ETL过程中,我使用EF来获取从一个数据库到另一个数据库的差异。现在正在中断的部分具有与此类似的代码 var setOne = await 1stContext.table.Where(x => x.DateModified >= inputDate)).Select(x => new { x.UserId, x.Ro

所以我从版本4开始就一直在使用实体框架,最近在我正在做的一个项目中进行了一些突破性的更改。我只想说,在EF core 3.1.2(即EF core 2.2.6)的ETL过程中,我使用EF来获取从一个数据库到另一个数据库的差异。现在正在中断的部分具有与此类似的代码

var setOne = await 1stContext.table.Where(x => x.DateModified >= inputDate)).Select(x => new { x.UserId, x.RoleId, x.UniversityId }).ToListAsync();

var toRemove = 2ndContext.table.Where(x => setOne.Contains(new { x.UserId, x.RoleId, x.UniversityId })).ToList();
有一个匿名的投影“new{(items)}”过去可以工作,但现在它坏了。我尝试强制转换到一个命名元组,该元组自C#7以来是新的,但根据编译器的说法,在表达式树中不能这样做。有什么新方法的想法吗?也许只是做一个linq连接或类似的?我的想法总是在实现数据之前先执行where子句,这样等价的sql不会给出所有结果,然后再检查它们

更新这里是一个简单的打印屏幕没有ef的我的意思。我一直都是这样做的,我只想做一小部分,然后找到它。我可以做一个连接,但关键是如果你看我的第二个语句,我还没有用“toList”投射到一个真实的对象,如果我这样做了,我将失去获得我想要移除的对象的能力。我可能会加入,但我只是不想进行昂贵的数据库调用来获取所有内容,然后进行筛选。但加入可能有效。明天上班的时候我可能会玩这个,但如果有人知道的话,我只是想把它放在这里


根据伊万·斯托夫(Ivan Stoev)所说,我只是在实体声明之后和where之前加上了“AsEnumerable”。似乎EF Core 3.1比以前的迭代要严格得多

因此:

2ndContext.table.Where
变成这样:

2ndContext.table.AsEnumerable().Where

基本上只是明确地说,从我从其他人那里收集到的信息来看,这在我的客户机上是有意义的。

我的观点是正确的:)
包含非原语类型的内存收集,在EF/EF Core中从未工作过。在EF Core 1.x/2.x中,它可能看起来工作正常,但事实上这是由于客户端评估,它基本上在从数据库检索所有数据后在内存中执行过滤。这与在
之前添加
.AsEnumerable()
相同,其中
@IvanStoev啊,我从来不知道。因此,如果不先进行投影,然后一直保留SQL,那么连接可能会更好?很遗憾,涉及多个上下文/数据库的查询不受支持。请参阅本文,了解可能的解决方案-(这是针对EF6的,但同样适用于EFC)。你也可以看看这个第三方软件包——我从来没有试过,也不知道它是否支持EFC3.x