2013-11-14 2 views
1

Как переписать заданный цикл foreach с использованием LINQ, где statemetn?конвертировать foreach в оператор LINQ, используя где

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, поэтому это причина ошибки. Я не должен менять тип возврата, устанавливать код и анонимный тип.

ответ

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, что приводит к несоответствию типа.

0

бит перед кофе здесь, но это то, что вы ищете:

var modeList= from m in dbItems 
    select Mapper.ItemDataToModelMap(m); 
Смежные вопросы