Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq lambda实体,不包含定义_C#_Linq_Lambda_Dao - Fatal编程技术网

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,您也需要在返回它之前将它们聚合在一起。这将解决目前的问题,但是这远远不是最有效的方法(或可读的方法)