C# Linq lambda实体,不包含定义
我这里有一个查询代码:C# Linq lambda实体,不包含定义,c#,linq,lambda,dao,C#,Linq,Lambda,Dao,我这里有一个查询代码: //Get all records based on ActivityID and TaskID. public IList<Model.questionhint> GetRecords1(int listTask, int listActivity) { IList<Model.questionhint> lstRecords = context.questionhints.ToList(); return lstRecords.
//Get all records based on ActivityID and TaskID.
public IList<Model.questionhint> GetRecords1(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.TaskID == listTask && a.ActivityID == listActivity).ToList();
}
//根据ActivityID和TaskID获取所有记录。
公共IList GetRecords1(int listTask,int listActivity)
{
IList lstRecords=context.questionHists.ToList();
返回lstRecords.GroupBy(x=>new{x.QuestionNo,x.ActivityID,x.TaskID})。其中(a=>a.TaskID==listTask&&a.ActivityID==listActivity)。ToList();
}
错误出现在。Where
语句中,它表示不包含活动ID
和任务ID
的定义
完全错误:
“System.Linq.IGrouping”不包含“ActivityID”的定义,并且找不到接受“System.Linq.IGrouping”类型的第一个参数的扩展方法“ActivityID”(是否缺少using指令或程序集引用?)
我在查询语句方面很弱,基本上我想从数据库中检索记录,其中activity id=something和task id=something,并按questionNo、activityId和task id对它们进行分组 将其更改为其中(a=>a.Key.TaskID==listTask&&a.Key.ActivityID==listActivity)
您正在处理一个iGroup,它的键属性是匿名对象new{x.QuestionNo,x.ActivityID,x.TaskID}
这解决了最初的错误,但现在我们尝试返回IGroupings,它不是正确的返回类型。一个更干净的方法是
var groups = lstRecords.GroupBy(x => new { x.QuestionNo, x.ActivityID, x.TaskID }).Where(a => a.Key.TaskID == listTask && a.Key.ActivityID == listActivity);
IList<Model.questionhint> questionHints = new List<Model.questionhint>();
foreach(var group in groups)
{
questionHints.AddRange(group);
}
return questionHints;
参考资料将其更改为
其中(a=>a.Key.TaskID==listTask&&a.Key.ActivityID==listActivity)
您正在处理一个iGroup,它的键属性是匿名对象new{x.QuestionNo,x.ActivityID,x.TaskID}
这解决了最初的错误,但现在我们尝试返回IGroupings,它不是正确的返回类型。一个更干净的方法是
var groups = lstRecords.GroupBy(x => new { x.QuestionNo, x.ActivityID, x.TaskID }).Where(a => a.Key.TaskID == listTask && a.Key.ActivityID == listActivity);
IList<Model.questionhint> questionHints = new List<Model.questionhint>();
foreach(var group in groups)
{
questionHints.AddRange(group);
}
return questionHints;
参考资料这里最简单的修复方法是:在分组之前过滤(where);这还将减少分组必须完成的工作:
return context.questionhints
.Where(a => a.TaskID == listTask && a.ActivityID == listActivity)
.GroupBy(x => new { x.QuestionNo, x.ActivityID, x.TaskID })
.ToList();
如前所述,它在原始代码中不起作用的原因是,GroupBy
返回一个组序列-每个组都有一个.Key
(您的匿名类型),并且本身是该组中项目的IEnumerable
序列
然而!您的方法声明返回IList
;您的分组数据不是,也永远不会是IList
——它将是IList
。因此:如果您声称它是一个IList
,则不能像这样分组,而且由于分组是匿名类型,因此不能将返回类型更改为匹配。你有两个选择:
- 不要分组
- 按可声明的内容(自定义类型或
)分组,并将返回类型更改为匹配元组
public IList<IGrouping<Tuple<int,int,int>,Model.questionhint>>
GetRecords1(int listTask, int listActivity)
{
return context.questionhints
.Where(a => a.TaskID == listTask && a.ActivityID == listActivity)
.GroupBy(x => Tuple.Create(x.QuestionNo, x.ActivityID, x.TaskID))
.ToList();
}
公共IList
GetRecords1(int listTask、int listActivity)
{
返回context.questionHipts
.Where(a=>a.TaskID==listTask&&a.ActivityID==listActivity)
.GroupBy(x=>Tuple.Create(x.QuestionNo,x.ActivityID,x.TaskID))
.ToList();
}
这里最简单的修复方法是:在分组之前过滤(where);这还将减少分组必须完成的工作:
return context.questionhints
.Where(a => a.TaskID == listTask && a.ActivityID == listActivity)
.GroupBy(x => new { x.QuestionNo, x.ActivityID, x.TaskID })
.ToList();
如前所述,它在原始代码中不起作用的原因是,GroupBy
返回一个组序列-每个组都有一个.Key
(您的匿名类型),并且本身是该组中项目的IEnumerable
序列
然而!您的方法声明返回IList
;您的分组数据不是,也永远不会是IList
——它将是IList
。因此:如果您声称它是一个IList
,则不能像这样分组,而且由于分组是匿名类型,因此不能将返回类型更改为匹配。你有两个选择:
- 不要分组
- 按可声明的内容(自定义类型或
)分组,并将返回类型更改为匹配元组
public IList<IGrouping<Tuple<int,int,int>,Model.questionhint>>
GetRecords1(int listTask, int listActivity)
{
return context.questionhints
.Where(a => a.TaskID == listTask && a.ActivityID == listActivity)
.GroupBy(x => Tuple.Create(x.QuestionNo, x.ActivityID, x.TaskID))
.ToList();
}
公共IList
GetRecords1(int listTask、int listActivity)
{
返回context.questionHipts
.Where(a=>a.TaskID==listTask&&a.ActivityID==listActivity)
.GroupBy(x=>Tuple.Create(x.QuestionNo,x.ActivityID,x.TaskID))
.ToList();
}
感谢您的快速回复,在完成上述操作后,我出现了以下错误:无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.IList”。存在显式转换(是否缺少转换?)问题在于Where子句返回IEnumerable>(忽略类型)。iGroup是IEnumerable,但即使我们将其简化为IEnumerable,您也需要在返回它之前将它们聚合在一起。这将解决目前的问题,但这远不是最有效的方法(或可读的方法)。这是因为我的数据库中有许多记录属于同一个questionNo、taskid和activityid,所以我需要对它们进行分组以将它们分开。这是我的表格如果你想分组,你不能返回IList。如果要在之后将它们分开,请在返回此函数后对它们进行分组。否则,对它们进行分组的工作将丢失(当您将它们作为列表返回时,您将再次对它们进行解组)。感谢您的快速回复,在执行上述操作后,我出现了以下错误:无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.IList”。存在显式转换(是否缺少转换?)问题在于Where子句返回IEnumerable>(忽略类型)。iGroup是IEnumerable,但即使我们将其简化为IEnumerable,您也需要在返回它之前将它们聚合在一起。这将解决目前的问题,但是这远远不是最有效的方法(或可读的方法)