当我使用EF 2.2时,它运行此代码时没有任何问题:
var resource = locResRepo.GetWhere(i => i.ForApplication.ToLower() == applicationName.ToLower())
.Where(resourcesConditionExpression)
.Select(item => new ResourceKeyObject
{
Id = item.Id,
ResourceKey = item.ResourceKey,
ResourceKeyValues = item.ActualLocalizationTranslation
.Where(translationConditionExpression)
.Select(v => new ResourceKeyValues
{
Language = v.Language,
KeyValue = v.Value
}).ToList()
}).ToList();但是现在它抛出了错误:
System.InvalidOperationException: Processing of the LINQ expression '(MaterializeCollectionNavigation(
navigation: Navigation: LocalizationResources.ActualLocalizationTranslation,
subquery: (NavigationExpansionExpression
Source: DbSet<ActualLocalizationTranslation>
.Where(a => EF.Property<Nullable<int>>(l, "Id") != null && EF.Property<Nullable<int>>(l, "Id") == EF.Property<Nullable<int>>(a, "ResourceId"))
PendingSelector: a => (NavigationTreeExpression
Value: (EntityReference: ActualLocalizationTranslation)
Expression: a)
)
.Where(i => EF.Property<Nullable<int>>((NavigationTreeExpression
Value: (EntityReference: LocalizationResources)
Expression: l), "Id") != null && EF.Property<Nullable<int>>((NavigationTreeExpression
Value: (EntityReference: LocalizationResources)
Expression: l), "Id") == EF.Property<Nullable<int>>(i, "ResourceId")))
.Where(t => True)' by 'NavigationExpandingExpressionVisitor' failed. This may indicate either a bug or a limitation in EF Core. See https://go.microsoft.com/fwlink/?linkid=2101433 for more detailed information.
at Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor) and so on.....我真的不明白为什么..也许我知道一些东西,但我不知道如何实现它
发布于 2020-01-30 21:33:40
从3.0开始,不再在客户端评估EF Core LINQ查询。learn more: MSDN
实际上,如果i.ForApplication属性做了一些计算,我认为你的问题可能出在它身上。
发布于 2020-01-30 22:01:07
我找到了一个解决方案。之前的select必须是.ToList(),因为EF3.1逻辑
https://stackoverflow.com/questions/59987116
复制相似问题