InvalidOperationException:LINQ表达式'GroupByShaperExpression:

3npbholx  于 2023-06-19  发布在  其他
关注(0)|答案(2)|浏览(123)
fileMovementRepository.GetAll()
                    .Where(fm => repository.GetAll().Select(f => f.Id).Contains(fm.FileId) && fm.TransferredById == userId)
                    .Include(f => f.User).Include(f => f.File).ThenInclude(f => f.Category)
                    .OrderByDescending(f => f.MovedOn)
                    .GroupBy(f => f.FileId)
                    .Select(f=>f.First())
                    .ToList();

运行时显示以下错误
处理请求时发生未处理的异常。InvalidOperationException:LINQ表达式'GroupByShaperExpression:密钥选择器:f·FileId,ElementSelector:EntityShaperExpression:实体类型:FileMovement ValueBufferExpression:ProjectionBindingExpression:EmptyProjectionMember IsNullable:假的
无法翻译“. First()”。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList’或“ToListAsync”的调用显式切换到客户端求值。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038。Microsoft. EntityFrameworkCore. Query. RelationalSqlTranslatingExpressionVisitor. VisitMethodCall(MethodCallExpression methodCallExpression)
InvalidOperationException:LINQ表达式'GroupByShaperExpression:密钥选择器:f·FileId,ElementSelector:EntityShaperExpression:实体类型:FileMovement ValueBufferExpression:ProjectionBindingExpression:EmptyProjectionMember IsNullable:False。无法翻译“First()”。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList’或“ToListAsync”的调用显式切换到客户端求值。请参阅https://go.microsoft.com/fwlink/?linkid=2101038了解更多信息。

lfapxunr

lfapxunr1#

GroupBy之前使用ToList(),它将按预期工作。

fileMovementRepository.GetAll()
                .Where(fm => repository.GetAll().Select(f => f.Id).Contains(fm.FileId) && fm.TransferredById == userId)
                .Include(f => f.User).Include(f => f.File).ThenInclude(f => f.Category)
                .OrderByDescending(f => f.MovedOn)
                .ToList()
                .GroupBy(f => f.FileId)
                .Select(f=>f.First())
                .ToList();
z2acfund

z2acfund2#

我有一个类似的情况下,并与提供的例子,它失败了

repository.GetAll().Select(f => f.Id).Contains(fm.FileId)

因为f.Id不可为空,而fm.FileId可为空。我创建了一个List<int?>在查询和主查询工作之前。

List<int?> repositoryIds =  repository.GetAll().Select(f => (int?)f.Id).ToList();
fileMovementRepository.GetAll()
                        .Where(fm => repositoryIds.Contains(fm.FileId) && fm.TransferredById == userId)
                        .Include(f => f.User).Include(f => f.File).ThenInclude(f => f.Category)
                        .OrderByDescending(f => f.MovedOn)
                        .GroupBy(f => f.FileId)
                        .Select(f=>f.First())
                        .ToList();

相关问题