簡體   English   中英

多次C#linq組

[英]C# linq group by multiple times

我有一個對象測驗,看起來像:

public class Quiz
{     
    public int Id { get; set; }          
    public ICollection<MathQuiz> MathQuizzes { get; set; }     
}

MathQuizze對象如下所示:

public class MathQuiz
{

    public int Id { get; set; }

    public int QuizId{ get; set; }
    public Quiz Quiz{ get; set; }

    public int AnswerId { get; set; }
    public Answer Answer { get; set; }

    public int TagId{ get; set; }
    public Tag Tag { get; set; }

    public bool IsCorrect { get; set; }

}

並有一個對象(UserQuizzes)看起來像:

public class UserQuizes
    {
        public int Id { get; set; }


        public int UserId { get; set; }
        public User User { get; set; }


        public int QuizId { get; set; }
        public Quiz Quiz { get; set; }

}

UserQuizzes只是表達用戶和測驗之間多對多關系的類。 這是一個示例數據:

     List<Quiz> quizzes = new List<Quiz>();
        quizzes.Add(new Quiz{ Id = 1, MathQuizzes = new List<MathQuiz>{ 
                  new MathQuiz { AnswerId = 58, TagId = 1, IsCorrect = false },  
                  new MathQuiz { AnswerId = 26, TagId = 2, IsCorrect = true }, 
                  new MathQuiz { AnswerId = 57, TagId = 3, IsCorrect = true },

                  new Quiz{ Id = 2, MathQuizzes = new List<MathQuiz>{ 
                  new MathQuiz { AnswerId = 59, TagId = 1, IsCorrect = false },  
                  new MathQuiz { AnswerId = 87, TagId = 2, IsCorrect = true }, 
                  new MathQuiz { AnswerId = 25, TagId = 3, IsCorrect = true }, });

    List<UserQuizzes> userQuizzes = new List<UserQuizzes>();
        userQuizzes.Add(new Quiz{ QuizId = 1, UserId = 1},
        userQuizzes.Add(new Quiz{ QuizId = 2, UserId = 1});

請不要花太多時間批評,我只想使用每個人都非常熟悉的東西。

我想要實現的是用戶按照MathQuiz TagId進行分組並得到如下數據:

TagId : 1, IsCorrect: true(0), false(2);
TagId : 2, IsCorrect: true(2), false(0);
TagId : 3, IsCorrect: true(2), false(0);

你發布的代碼有錯別字,但這是基本的想法:

var query =
    from q in quizzes
    from mq in q.MathQuizzes
    join uq in userQuizzes on q.Id equals uq.QuizId
    group mq by mq.TagId into g
    select new
    {
        TagId = g.Key,
        Correct = g.Sum(e => e.IsCorrect ? 1 : 0),
        Incorrect = g.Sum(e => e.IsCorrect ? 0 : 1)
    };

基本上,您需要通過加入數據集來獲取有效的源集,並執行常規的分組/計算聚合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM