【问题标题】:Cannot implicitly convert type 'System.Collections.Generic.List<System.Linq.IGrouping<int, XXX>>' to 'System.Collections.Generic.List<XXX>>无法将类型 'System.Collections.Generic.List<System.Linq.IGrouping<int, XXX>>' 隐式转换为 'System.Collections.Generic.List<XXX>>
【发布时间】:2019-12-12 21:03:03
【问题描述】:

我试图在getAllQuestions() 方法中返回List&lt;QuestionsAndChoices&gt;,但我收到了这个错误

Cannot implicitly convert type 'System.Collections.Generic.List<System.Linq.IGrouping<int, HowWellDoYouKnowMeAPI.Models.models.QuestionsAndChoices>>' to 'System.Collections.Generic.List<HowWellDoYouKnowMeAPI.Models.models.QuestionsAndChoices>

获取所有问题

public List<QuestionsAndChoices> getAllQuestions()
{
    List<QuestionsAndChoices> questionsAndChoices1 = context.quizQuestionAndChoices.
        Join(context.quizQuestions, QandC => QandC.QuizQuestions.QuizQuestionsId, qustions => qustions.QuizQuestionsId, (QandC, qustions) =>
            new
            {
                QandC,
                qustions
            }).
            Join(context.quizChoices, QandC1 => QandC1.QandC.QuizChoicesId, choices => choices.QuizChoicesId, (QandC1, choices) =>
            new QuestionsAndChoices
            {
                QuestionId = QandC1.qustions.QuizQuestionsId,
                Question = QandC1.qustions.Questions,
                Choices = choices,
             }).GroupBy(e => e.QuestionId).ToList();

    return questionsAndChoices1;
}

QuestionsAndChoices类

public class QuestionsAndChoices
    {
        public int QuestionId { get; set; }
        public string Question { get; set; }
         public List<QuizChoices> Choices { get; set; }
    }

QuizQuestionAndChoices类

public class QuizQuestionAndChoices
{
    public int QuizQuestionAndChoicesID { get; set; }
    public int QuizChoicesId { get; set; }
    public int QuizQuestionsId { get; set; }
    public QuizChoices quizChoices { get; set; }
    public QuizQuestions QuizQuestions { get; set; }
}

quizQuestions类

 public class QuizQuestions
 {
     public int QuizQuestionsId { get; set; }
     public string Questions { get; set; }
     public List<QuizzerQCdetails> quizzerQCdetails { get; set; }
     public List<QuizQuestionAndChoices> QuizQuestionAndChoices { get; set; }
 }

QuizChoices类

public class QuizChoices
{
    public int QuizChoicesId { get; set; }
    public string Choice { get; set; }
    public List<QuizzerQCdetails> quizzerQCdetails { get; set; }
    public List<QuizQuestionAndChoices> quizQuestionAndChoices { get; set; 
}

我希望这样的输出

{
    "questionId":1,
    "question":"q1",
    "choices":{
        {
        "quizChoicesId":1,
        "choice":"1c1",
        "quizzerQCdetails":null,
        "quizQuestionAndChoices":null
        },
        {
        "quizChoicesId":2,
        "choice":"1c2",
        "quizzerQCdetails":null,
        "quizQuestionAndChoices":null
        }
    }
}

但是我得到了这个输出 @IbraHimM.Nada我已经通过了那个代码,但是我得到了这样的输出

{
"questionId":1,
"question":"q1",
"choices":{
        {
        "quizChoicesId":1,
        "choice":"1c1",
        "quizzerQCdetails":null,
        "quizQuestionAndChoices":null
        }
    }
}
,
{
"questionId":1,
"question":"q1",
"choices":{
        {
        "quizChoicesId":2,
        "choice":"1c2",
        "quizzerQCdetails":null,
        "quizQuestionAndChoices":null
        }
    }
}

【问题讨论】:

  • 请检查这个问题我认为它会有所帮助stackoverflow.com/questions/8521025/…
  • @IbraHimM.Nada 谢谢,我浏览了那篇文章,但得到了像上面这样的输出(更新了问题),这是不正确的
  • 您的预期输出错误。不应该是“选择”:“2c1”,应该是“选择”:“1c2”,
  • @jdweng 抱歉,我更新了我的代码。谢谢;)
  • 你为什么有.GroupBy(e =&gt; e.QuestionId)?是不是因为您希望许多问题具有相同的 ID,然后您想将所有共享 ID 的问题分组到“组”中,然后返回这些组的列表?因为这就是你正在做的事情。然后你有一个List&lt;&gt; groupings of QuestionsAndChoices。那不是简单的QuestionsAndChoices 列表。也许您只是想删除.GroupBy(e =&gt; e.QuestionId) 的东西?你的意思是.OrderBy 吗?

标签: c# asp.net-mvc entity-framework linq


【解决方案1】:

尝试以下:

List<QuestionsAndChoices> questionsAndChoices1 = (
    from qandc in context.quizQuestionAndChoices
    join quest in context.quizQuestions on qandc.QuizQuestionsId equals quest.QuizQuestionsId
    join answers in context.quizChoices on qandc.QuizChoicesId equals answers.QuizChoicesId
    select new { question = quest.Questions, answers = answers })
  .GroupBy(x => x.question)
  .Select(x => new QuestionsAndChoices()
    {
      Question = x.Key,
      Choices = x.Select(y => y.answers).ToList()
    }).ToList();

【讨论】:

  • 感谢@jdweng 非常感谢,我们如何使用 Lambda 表达式编写这个查询。
  • 把它分成两个查询。第一个括号中的所有内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多