使用where将foreach转换为LINQ语句

ren*_*thy 1 c# linq collections

如何使用LINQ在statemetn中重写给定的foreach循环?

List<ItemData> dbItems = _dataService.GetAllItems();
List<ItemModel> modeList = new List<ItemModel>();
foreach (ItemData p in dbItems )
{
    ItemModel m = Mapper.ItemDataToModelMap(p);
    modeList.Add(m);
}
Run Code Online (Sandbox Code Playgroud)

我试过这个,但这给出了错误:无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'System.Collections.Generic.IEnumerable'...

 var modeList= from m in dbItems 
     select new {item = Mapper.ItemDataToModelMap(m)     
 };
Run Code Online (Sandbox Code Playgroud)

编辑:使用它的方法应该返回IEnumerable,所以这是错误原因.我不应该改变返回类型,安装代码和匿名类型.

Bar*_*zKP 5

为了有一个List<ItemModel>结果试试这个:

var modeList = dbItems
    .Select(m => Mapper.ItemDatatoModelMap(m))
    .ToList();
Run Code Online (Sandbox Code Playgroud)

使用查询表示法:

var modeList = (from m in dbItems select Mapper.ItemDataToModelMap(m))
    .ToList();
Run Code Online (Sandbox Code Playgroud)

new { ... }符号创建一个匿名类型,而您需要List<T>一个特定类型 - ItemModel.

另请注意,语法上没有任何错误:

var modeList= from m in dbItems 
    select new {item = Mapper.ItemDataToModelMap(m)};
Run Code Online (Sandbox Code Playgroud)

但是你对错误的描述并不清楚.你要么不是var因为你提出的(但是List<ItemModel>),要么做其他事情modeList会导致类型不匹配.