LINQ-to-Objects - 不能按对象分组
LINQ-to-Objects - cannot group by Object
我将 efcore 2.2 升级到 5,但简单的分组方式不起作用,
数据已经在内存中了,看一下:
List<IGrouping<Categories, Businesses>> businessesByCategory =
location.Businesses
.GroupBy(x => x.Category.Parent ?? x.Category)
.ToList();
在 Ef Core 2.2 中它运行良好,业务按类别分组,现在它什么都不做。
如果我尝试按 id 分组,它会起作用:
List<IGrouping<int, Businesses>> businessesByCategory = location.Businesses
.GroupBy(x => x.Category.ParentId ?? x.CategoryId)
.ToList();
但我需要类别实体,这样我只能得到类别 ID。
此问题是由 EF Core 3.0 无跟踪查询行为重大更改引起的 - No-tracking queries no longer perform identity resolution。因此,具有相同 Id
的 Category
对象现在是不同的实例,因此 LINQ to Objects GroupBy
使用的默认相等比较器将它们视为不同的键,因此根本不分组.
EF Core 5.0 恢复了 2.x 行为 - No-tracking queries with identity resolution, but you must opt-in for it using the AsNoTrackingWithIdentityResolution
method in place of AsNoTracking()
. Or QueryTrackingBehavior.NoTrackingWithIdentityResolution
if setting the default ChangeTracker.QueryTrackingBehavior
.
我将 efcore 2.2 升级到 5,但简单的分组方式不起作用,
数据已经在内存中了,看一下:
List<IGrouping<Categories, Businesses>> businessesByCategory =
location.Businesses
.GroupBy(x => x.Category.Parent ?? x.Category)
.ToList();
在 Ef Core 2.2 中它运行良好,业务按类别分组,现在它什么都不做。
如果我尝试按 id 分组,它会起作用:
List<IGrouping<int, Businesses>> businessesByCategory = location.Businesses
.GroupBy(x => x.Category.ParentId ?? x.CategoryId)
.ToList();
但我需要类别实体,这样我只能得到类别 ID。
此问题是由 EF Core 3.0 无跟踪查询行为重大更改引起的 - No-tracking queries no longer perform identity resolution。因此,具有相同 Id
的 Category
对象现在是不同的实例,因此 LINQ to Objects GroupBy
使用的默认相等比较器将它们视为不同的键,因此根本不分组.
EF Core 5.0 恢复了 2.x 行为 - No-tracking queries with identity resolution, but you must opt-in for it using the AsNoTrackingWithIdentityResolution
method in place of AsNoTracking()
. Or QueryTrackingBehavior.NoTrackingWithIdentityResolution
if setting the default ChangeTracker.QueryTrackingBehavior
.