将linq应用于List时出错

时间:2015-07-17 15:40:56

标签: c# linq ienumerable

我正在尝试使用linq

从更大的列表创建子列表
List<ScenarioDetailModel> chartScenarioDetailsList = new List<ScenarioDetailModel>();

List<ScenarioDetailModel> subList = new List<ScenarioDetailModel>();
subList = chartScenarioDetailsList.Where(s => s.Code == "C3");

chartScenarioDetailsListsubList属于同一类型,但编译器抱怨类型转换并且不会编译,错误如下:

  

错误190无法隐式转换类型&#39; System.Collections.Generic.IEnumerable&#39;到&#39; System.Collections.Generic.List&#39;。存在显式转换(您是否错过了演员?)

但是,当我将子列表的类型从List更改为IEnumerable时,它会进行编译:

IEnumerable<ScenarioDetailModel> subList = new List<ScenarioDetailModel>();
subList = chartScenarioDetailsList.Where(s => s.Code == "C3");

我的问题是:为什么会这样?

2 个答案:

答案 0 :(得分:3)

Where()确实返回IEnumerable,而不是List。

尝试subList = chartScenarioDetailsList.Where(s => s.Code == "C3").ToList();

此外,您应该直接使用

分配subList

chartScenarioDetailsList.Where(s => s.Code == "C3").ToList();

而不是new,因为这样做会丢失您对new的调用所创建的引用。

答案 1 :(得分:0)

"nearest"

但你真的应该接受var subList = chartScenarioDetailsList.FindAll(s => s.Code == "C3");概念,正如其他人在评论和答案中所建议的那样:

IEnumerable

如果你对子列表的使用是立即和临时的,你可以完全跳过它,只是迭代// I temporarily need a local sub-list to do something // Approach 1 (older list approach) { // scope of subList var subList = chartScenarioDetailsList.FindAll(s => s.Code == "C3"); foreach (var detail in subList) { /* do a thing with detail */ } } // end of scope // Approach 2 (enumerable approach) foreach (var detail in chartScenarioDetailsList.Where(s => s.Code == "C3")) { /* do a thing with detail */ } 结果。