如何使用LINQ重写给定的foreach循环,其中statemetn?
List<ItemData> dbItems = _dataService.GetAllItems();
List<ItemModel> modeList = new List<ItemModel>();
foreach (ItemData p in dbItems )
{
ItemModel m = Mapper.ItemDataToModelMap(p);
modeList.Add(m);
}
我试过这个,但这给出了错误:无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'System.Collections.Generic.IEnumerable'......
var modeList= from m in dbItems
select new {item = Mapper.ItemDataToModelMap(m)
};
编辑: 使用它的方法应该返回IEnumerable,所以这是错误原因。我不应该更改返回类型,安装代码和匿名类型。
答案 0 :(得分:5)
要获得List<ItemModel>
,请尝试以下操作:
var modeList = dbItems
.Select(m => Mapper.ItemDatatoModelMap(m))
.ToList();
使用查询表示法:
var modeList = (from m in dbItems select Mapper.ItemDataToModelMap(m))
.ToList();
new { ... }
表示法会创建anonymous type,而您需要具有特定类型的List<T>
- ItemModel
。
另请注意,语法上没有任何错误:
var modeList= from m in dbItems
select new {item = Mapper.ItemDataToModelMap(m)};
但是您对错误的描述并不清楚。您要么使用var
,要么使用List<ItemModel>
),要么使用modeList
执行其他导致类型不匹配的内容。
答案 1 :(得分:0)
这里有点咖啡,但这就是你要找的东西:
var modeList= from m in dbItems
select Mapper.ItemDataToModelMap(m);