无法将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);

无法将IEnumerable转换为IList错误

Where返回的是IEnumerable,而不是List。由于您实际上不需要将traces变量在这里作为IList,因此您应该将其键入为IEnumerable,以避免将查询结果填充到列表中的不必要开销,以便您可以遍历该列表并填充列表。

如果重要的是在稍后的某个时间点将查询结果具体化到一个列表中,那么在您完成查询构造之后,您可以在IEnumerable上调用ToList,以使用结果构建List

在上面的上面,看起来您的实际数据源是一个IQueryable,表示对数据库的查询,而不是内存中的集合。您应该使用IQueryable作为变量的类型。这将构建一个查询,而不是查询的结果,因此在构建该查询之后,您可以从数据库请求过滤的结果,而不是将整个数据库表拉入内存并在那里过滤。