2017-10-04 13 views
0

Voici mon modèle ci-dessous et ceci est un code source que j'ai téléchargé depuis 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: Je suis l'instruction.La méthode asynchrone déclenche une erreur lors de l'utilisation de la requête lambda pour assigner le groupe de méthodes

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; } 
    } 

et voici mon contrôleur où je reçois l'erreur qui dit « q.Count ne peut pas affecter le groupe de méthode pour propery de type anonyme. »:

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); 
     } 

Répondre

0

q.Count est pas un nom valide pour une champ sur un type anonyme, vous devez lui donner un nom comme vous l'avez fait pour QuestionID

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

vous pouvez également diviser le orderby à part pour un OrderByDecending et un ThenByDecending.

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

Si vous travaillez sur un objet IQueryable il peut se retrouver avec une meilleure requête pour le serveur.