1

LINQ where statementmetn を使用して特定の 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 { ... }表記は匿名型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 に答える