2017-10-04 31 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對象,它可能會以更好的服務器查詢結束。