2017-10-04 40 views
0

以下是我的模型,下面是我从https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/build-a-single-page-application-spa-with-aspnet-web-api-and-angularjs下载的源代码:我正在按照说明操作。使用lambda查询分配方法组时,异步方法触发错误

public class TriviaQuestion 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    [Required] 
    public string Title { get; set; } 

    public virtual List<TriviaOption> Options { get; set; } 
} 


    public class TriviaOption 
    { 
     [Column(Order = 1), DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int Id { get; set; } 

     [Required] 
     public string Title { get; set; } 

     [Column(Order = 0), ForeignKey("TriviaQuestion")] 
     public int QuestionId { get; set; } 

     [JsonIgnore] 
     public virtual TriviaQuestion TriviaQuestion { get; set; } 

     [JsonIgnore] 
     public bool IsCorrect { get; set; } 
    } 

,这里是我的控制器在那里我得到它说错误“q.Count不能分配方法组到匿名类型属性格式”:

private async Task<TriviaQuestion> NextQuestionAsync(string userId) 
     { 
      var lastQuestionId = await this.db.TriviaAnswers 
       .Where(a => a.UserId == userId) 
       .GroupBy(a => a.QuestionId) 
       .Select(g => new { QuestionId = g.Key, Count = g.Count() }) 
       .OrderByDescending(q => new { **q.Count**, QuestionId = q.QuestionId }) 
       .Select(q => q.QuestionId) 
       .FirstOrDefaultAsync(); 

      var questionsCount = await this.db.TriviaQuestions.CountAsync(); 

      var nextQuestionId = (lastQuestionId % questionsCount) + 1; 
      return await this.db.TriviaQuestions.FindAsync(CancellationToken.None, nextQuestionId); 
     } 

回答

0

q.Count是不是一个有效的名称在匿名类型字段,你需要给它一个名字像你这样的QuestionId

.OrderByDescending(q => new { Count = q.Count, QuestionId = q.QuestionId }) 

你也可以在一个OrderByDecending和ThenByDecending除了拆分排序依据。

.OrderByDescending(q => q.Count) 
.ThenByDescending(q => q.QuestionId) 

如果您正在处理IQueryable对象,它可能会以更好的服务器查询结束。