查询在实体框架,.net Core 3.1中没有翻译



我们最近开始将。net core 2.1应用程序迁移到。net core 3.1,在将EF升级到5.0.9之后,我们现有的一些查询出现了错误。仔细阅读它似乎有一些改变,使查询避免在客户端执行,除非它是Select投影的一部分。

解决方案之一是在查询中添加AsEnumerable或ToList,强制其在下一部分运行之前执行,而下一部分无法转换为直接SQL。

下面的查询之前可以工作:

unitOfWork.GetRepository<MAPPING_TABLE>().GetAll(predicate: x => x.USER_ID == userId).AsNoTracking()
.Include(p => p.Site).ThenInclude(p => p.Provier).ThenInclude(p => p.Location).AsNoTracking()
.GroupBy(x => x.Site.SM_PROVIDER_ID).Select(y => y.First()).ToList().
Count();

添加AsEnumerable使它能够与最新的EF一起工作,否则它会出错,抱怨GroupBy()无法翻译:

unitOfWork.GetRepository<MAPPING_TABLE>().GetAll(predicate: x => x.USER_ID == userId).AsNoTracking()
.Include(p => p.Site).ThenInclude(p => p.Provier).ThenInclude(p => p.Location).AsNoTracking()
.AsEnumerable()
.GroupBy(x => x.Site.SM_PROVIDER_ID).Select(y => y.First()).ToList().
Count();

是否有另一种方法来编写该查询,而不必在GroupBy之前使用AsEnumerable ?

对于这样简单的查询,您不需要分组,包括,AsNoTracking:

unitOfWork.GetRepository<MAPPING_TABLE>().GetAll(predicate: x => x.USER_ID == userId)
.Select(x => x.Site.SM_PROVIDER_ID)
.Distinct()
.Count();

最新更新