使用where将foreach转换为LINQ语句

时间:2013-11-14 09:33:21

标签: c# linq collections

如何使用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,所以这是错误原因。我不应该更改返回类型,安装代码和匿名类型。

2 个答案:

答案 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);