我正在使用实体框架来执行此操作,我有这个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 =新DAO.DAOQuestionHint();
IList<Model.questionhint> lstQuestionHints = qh.GetRecordsPlease(taskID, activityID);
这就是我的数据库表的样子:
我想要的是将同一个activityID,taskID和questionNo的记录组合在一行,现在每条记录都是逐行分开的:
我希望它像
我[回答]每天下午小睡一次
太阳[回答]没有绕地球移动。
所以我试图通过使用for循环在代码中使用替代,但是如果有3个或更多相同的activityID,taskID和questionNo的记录,则不能完美地工作,所以我需要在查询中对它们进行分组首先。
答案 0 :(得分: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
就足够了,但我不想肯定地说。)