首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >虽然使用了ToLists,但无法翻译LINQ表达式

虽然使用了ToLists,但无法翻译LINQ表达式
EN

Stack Overflow用户
提问于 2021-06-11 06:47:04
回答 1查看 81关注 0票数 1

我有下面的代码,首先创建一个list对象assessmentItems,然后在LINQ中使用它来获取CurrentScore

代码语言:javascript
复制
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

知道为什么会发生这种事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-11 07:57:50

让我帮你简化查询。不需要包含,因为您有自定义投影。如果为子查询元素添加ToList -它将不可翻译。如果您需要可翻译的查询--使用IQueryable。

代码语言:javascript
复制
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();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67932390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档