无法将IEnumerable转换为IList错误
本文关键字:IList 错误 转换 IEnumerable | 更新日期: 2023-09-27 18:03:26
我正在根据用户的表单输入构建一个linq查询。我有一个视图,它期望一个类型为"trace"的列表。
这种方法可能是完全错误的,但我得到以下错误的代码
错误7不能隐式转换类型"System.Collections.Generic"。到system . collections . generic . list。存在显式转换(您是否缺少强制类型转换?)
我不明白这一点,因为我从来没有在第一步将trace转换为可枚举的。
最后,我只想查询跟踪实体并向视图返回一个列表。
IList<trace> traces = new List<trace>();
//by users
if (form["reps"] != null)
{
List<string> reps = new List<string>(form["reps"].Split(','));
traces = traces.Where(s => reps.Contains(s.repslist));
}
//by start date
if (!String.IsNullOrWhiteSpace(form["homefrom"]))
{
DateTime sdate = Convert.ToDateTime(form["homefrom"]);
traces = traces.Where(t => t.tracedate >= sdate);
}
return PartialView("_tracescontainer", traces);
编辑我试了下面-一切编译,没有错误,在谷歌检查器,帖子显示pending没有错误。我已经等了大约10分钟了。在调试时,我逐步执行,该步骤永远不会到达IList tracelist = trace . tolist ();
没有错误,它只是离开了断点,好像操作已经完成,但没有结果发送给浏览器。
IEnumerable<trace> traces = db.traces;
//by users
if (form["reps"] != null)
{
List<string> reps = new List<string>(form["reps"].Split(','));
traces = traces.Where(s => reps.Contains(s.repslist));
}
//by start date
if (!String.IsNullOrWhiteSpace(form["homefrom"]))
{
DateTime sdate = Convert.ToDateTime(form["homefrom"]);
traces = traces.Where(t => t.tracedate >= sdate);
}
IList<trace> tracelist = traces.ToList();
return PartialView("_tracescontainer", tracelist);
Where
返回的是IEnumerable
,而不是List
。由于您实际上不需要将traces
变量在这里作为IList
,因此您应该将其键入为IEnumerable
,以避免将查询结果填充到列表中的不必要开销,以便您可以遍历该列表并填充新列表。
如果重要的是在稍后的某个时间点将查询结果具体化到一个列表中,那么在您完成查询构造之后,您可以在IEnumerable
上调用ToList
,以使用结果构建List
。
在上面的上面,看起来您的实际数据源是一个IQueryable
,表示对数据库的查询,而不是内存中的集合。您应该使用IQueryable
作为变量的类型。这将构建一个查询,而不是查询的结果,因此在构建该查询之后,您可以从数据库请求过滤的结果,而不是将整个数据库表拉入内存并在那里过滤。