0

我正在使用实体框架来执行此操作,我有这个 lambda 表达式:

public IList<Model.questionhint> GetRecordsPlease(int listTask, int listActivity)
{
   IList<Model.questionhint> lstRecords = context.questionhints.ToList();
   return lstRecords.GroupBy(x => new { 
                                      x.QuestionNo, 
                                      x.ActivityID, 
                                      x.TaskID })
                    .Where(a => a.Key.TaskID == listTask 
                             && a.Key.ActivityID == listActivity)
                    .ToList();         
}

但它说:

无法将类型“ System.Collections.Generic.List<System.Linq.IGrouping<AnonymousType#1,iStellar.Model.questionhint>>”隐式转换为“ System.Collections.Generic.IList<iStellar.Model.questionhint>”。存在显式转换(您是否缺少演员表?)

此代码位于我的名为 DAOQuestionHint 的 CRUD 类文件中。

我如何返回它,因为我需要在我的 xaml.cs(后面的代码)中调用它,如下所示:

私人 DAO.DAOQuestionHint qh = new DAO.DAOQuestionHint();

IList<Model.questionhint> lstQuestionHints = qh.GetRecordsPlease(taskID, activityID);

这是我的数据库表的样子:

在此处输入图像描述

我想要的是将相同activityID、taskID和questionNo的记录组合在一行中,现在每条记录都像这样逐行分隔:

在此处输入图像描述

我希望它像

我[回答]每天下午要睡午觉

太阳 [答案] 不绕地球转。

因此,我尝试通过使用 for 循环在后面的代码中使用替代方法,但是如果有 3 条或更多条相同的 activityID、taskID 和 questionNo 记录,那将无法正常工作,所以我需要先将它们分组到查询中。

4

1 回答 1

3

在我看来,您根本不需要分组-您只需要过滤即可。除非每个问题确实有不止一个提示(具有相同的任务和活动),否则您只需要:

public IList<Model.questionhint> GetRecordsPlease(int listTask, int listActivity)
{
    return context.questionhints
                  .Where(a => a.TaskID == listTask && a.ActivityID == listActivity)
                  .ToList();
}

请注意,与您当前的代码不同,这将在数据库中执行过滤,而不是将整个表拉到客户端然后进行分组/过滤。您需要注意,任何时候使用context.SomeTable.ToList(),都会拉取该表的全部内容。

我还强烈建议您更改模型以使用遵循 .NET 命名约定的类型名称,QuestionHint而不是questionhint.

(最后,我会Please从方法名称中删除 - 计算机不需要你像这样礼貌地命名。)

编辑:如果你真的想要组,你需要改变返回值。例如,您可以只返回一组组:

public IList<IGrouping<int, Model.questionhint>>
     GetRecordsPlease(int listTask, int listActivity)
{
    return context.questionhints
                  .Where(a => a.TaskID == listTask && a.ActivityID == listActivity)
                  .ToList()
                  .GroupBy(a => a.QuestionNo)
                  .ToList();
}

我故意ToList()在分组之前调用这里,然后再调用一次,以便获取一次数据,您可以随意迭代这些组,而无需返回数据库。(可能只是决赛ToList就足够了,但我不想肯定地说。)

于 2013-07-17T05:49:16.940 回答