1

如何使用 LINQ where 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);
}

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

 var modeList= from m in dbItems 
     select new {item = Mapper.ItemDataToModelMap(m)     
 };

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

4

2 回答 2

5

List<ItemModel>一个结果试试这个:

var modeList = dbItems
    .Select(m => Mapper.ItemDatatoModelMap(m))
    .ToList();

使用查询符号:

var modeList = (from m in dbItems select Mapper.ItemDataToModelMap(m))
    .ToList();

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

另请注意,在语法上没有任何问题:

var modeList= from m in dbItems 
    select new {item = Mapper.ItemDataToModelMap(m)};

但是您对错误的描述不清楚。您要么没有var按照您所介绍的那样使用(但是List<ItemModel>),要么做其他事情modeList导致类型不匹配。

于 2013-11-14T09:34:41.877 回答
0

在这里喝点咖啡,但这就是你要找的东西:

var modeList= from m in dbItems 
     select Mapper.ItemDataToModelMap(m);
于 2013-11-14T09:35:33.160 回答