目前不支持 IQueryable Intersect
IQueryable Intersect is currently not supported
当我尝试这样做时
//data.Photos it's IEnumerable<Photo>. Comparer worked by Id.
List<Photo> inDb = db.Photos
.Intersect(data.Photos, new PhotoComparer())
.ToList();
我遇到异常:
NotSupportedException: Could not parse expression
'value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[ReportViewer.Models.DbContexts.Photo]).Intersect(__p_0, __p_1)'
This overload of the method #x27;System.Linq.Queryable.Intersect' is currently not supported.
// This works
List<Photo> inDb = db.Photos
.ToList()
.Intersect(data.Photos, new PhotoComparer())
.ToList();
// But will it take a long time - or not ?
我需要什么才能将 Intersect 与 IQueryable 和 IEnumerable 集合一起使用?
由于“自定义比较器”,虽然它的功能可能微不足道,但框架目前无法将您的语句翻译成 SQL(我怀疑您正在使用)。
接下来,您似乎有一个内存中的集合,您要对其执行此交集。
因此,如果您想知道速度,为了让它正常工作,您需要将数据发送到数据库服务器,然后根据 Id 检索数据。
所以基本上,您正在寻找一种执行内部联接的方法,这相当于 SQL 相交。
你可以用流动的 linq 查询来做什么:
//disclaimer: from the top of my head
var list= from dbPhoto in db.Photos
join dataPhoto in data.Photos on dbPhoto.Id equals dataPhoto.Id
select dbPhoto;
虽然这不会起作用,因为据我所知,EF 无法对内存中的数据集执行 join
。
因此,您也可以:
- 获取数据作为 IEnumerable(但是是的,您将首先检索整个集合)
- 使用
Contains
,但要小心,如果你不使用原始类型,这可能会转化为一堆 SQL OR
语句
但基本上这取决于您查询的数据量。您可能需要重新考虑您的设置并尝试能够根据某些所有权(例如用户或其他方式)查询数据。
当我尝试这样做时
//data.Photos it's IEnumerable<Photo>. Comparer worked by Id.
List<Photo> inDb = db.Photos
.Intersect(data.Photos, new PhotoComparer())
.ToList();
我遇到异常:
NotSupportedException: Could not parse expression
'value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[ReportViewer.Models.DbContexts.Photo]).Intersect(__p_0, __p_1)'
This overload of the method #x27;System.Linq.Queryable.Intersect' is currently not supported.
// This works
List<Photo> inDb = db.Photos
.ToList()
.Intersect(data.Photos, new PhotoComparer())
.ToList();
// But will it take a long time - or not ?
我需要什么才能将 Intersect 与 IQueryable 和 IEnumerable 集合一起使用?
由于“自定义比较器”,虽然它的功能可能微不足道,但框架目前无法将您的语句翻译成 SQL(我怀疑您正在使用)。
接下来,您似乎有一个内存中的集合,您要对其执行此交集。
因此,如果您想知道速度,为了让它正常工作,您需要将数据发送到数据库服务器,然后根据 Id 检索数据。
所以基本上,您正在寻找一种执行内部联接的方法,这相当于 SQL 相交。
你可以用流动的 linq 查询来做什么:
//disclaimer: from the top of my head
var list= from dbPhoto in db.Photos
join dataPhoto in data.Photos on dbPhoto.Id equals dataPhoto.Id
select dbPhoto;
虽然这不会起作用,因为据我所知,EF 无法对内存中的数据集执行 join
。
因此,您也可以:
- 获取数据作为 IEnumerable(但是是的,您将首先检索整个集合)
- 使用
Contains
,但要小心,如果你不使用原始类型,这可能会转化为一堆 SQLOR
语句
但基本上这取决于您查询的数据量。您可能需要重新考虑您的设置并尝试能够根据某些所有权(例如用户或其他方式)查询数据。