c# - 尽管使用了 ToLists,但无法翻译 LINQ 表达式
问题描述
我有以下代码,我首先创建一个列表对象assessmentItems
,然后在 LINQ 中使用它来获取CurrentScore
.
List<AssessmentItem> assessmentItems =
_context.AssessmentItems
.Include(ai => ai.Assessment).ThenInclude(assess => assess.Evaluator)
.Where(ai => ai.IsActive &&
ai.Assessment.PeerReviewAssignmentId == peerReviewAssignmentId &&
ai.Assessment.RubricId == rubricId).ToList();
List<RubricDTO> resultToReturn = _context.Rubrics
.Include(r => r.RubricItemCategories)
.Where(r => r.Id == rubricId)
.Select(r => new RubricDTO
{
Ranking = r.Ranking,
Description = r.Description,
RubricItemCategories = r.RubricItemCategories.Select(ric => new RubricItemCategoryDTO
{
Id = ric.Id,
Description = ric.Description,
RubricItems = ric.RubricItems.Select(ri => new RubricItemDTO
{
Id = ri.Id,
Title = ri.Title,
CurrentScore = assessmentItems.Count > 0 ? assessmentItems
.Where(aitem2 => aitem2.RubricItemId == ri.Id && aitem2.Assessment.EvaluatorId == userId)
//.Take(1)
.Select(s => s.CurrentScore)
.FirstOrDefault() : 0,
})
}).OrderBy(ric => ric.Order).ToList()
}).ToList();
但是,我收到以下错误:
System.InvalidOperationException:无法翻译 LINQ 表达式“aitem2”。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用显式切换到客户端评估。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038。
任何想法为什么会发生这种情况?
解决方案
让我帮助您简化查询。不需要包含,因为您有自定义投影。如果您添加ToList
子查询元素 - 它将无法翻译。如果您需要可翻译的查询 - 使用 IQueryable。
var assessmentItems = _context.AssessmentItems
.Where(ai => ai.IsActive &&
ai.Assessment.PeerReviewAssignmentId == peerReviewAssignmentId &&
ai.Assessment.RubricId == rubricId);
var resultToReturn = _context.Rubrics
.Where(r => r.Id == rubricId)
.Select(r => new RubricDTO
{
Ranking = r.Ranking,
Description = r.Description,
RubricItemCategories = r.RubricItemCategories.Select(ric => new RubricItemCategoryDTO
{
Id = ric.Id,
Description = ric.Description,
RubricItems = ric.RubricItems.Select(ri => new RubricItemDTO
{
Id = ri.Id,
Title = ri.Title,
CurrentScore = assessmentItems
.Where(aitem2 => aitem2.RubricItemId == ri.Id && aitem2.Assessment.EvaluatorId == userId)
.Select(s => s.CurrentScore)
.FirstOrDefault(),
})
}).OrderBy(ric => ric.Order).ToList()
}).ToList();
推荐阅读
- css - 如何在 MUI 中设置 body 元素的样式
- ansible - 从剧本编辑 Ansible 保险库文件
- azure-active-directory - B2C issuerAssignedId 的联合 AAD 使用什么?
- python - 为什么有些数据点显示为 1e-16?我可以从情节中隐藏它们吗?
- r - 用级别替换索引向量
- laravel - 同一个调用中的两个 laravel 关系
- numpy - 绘制实验数据的平滑曲线(Python)
- python - 从 PySpark DataFrame 中的 XML 字段创建新列
- python - 使用理解和范围创建嵌套
- image-processing - PyTorch 在使用 Dataloader 加载时平铺图像