2009-10-16 2 views
0

У меня есть Dictionary<int, int> idsAndTypes = new Dictionary<int, int>(); и у меня естьИспользование LINQ запрос на словарь и список

List<Product> products = new List<Product>() 

как список продуктов, класс продукта, как показано ниже

class Product 
{ 
public int Id {get;set;} 
public int Type{get;set;} 

} 

словарных idsAndTypes содержит идентификаторы и типы , теперь я хочу использовать запрос linq в списке, чтобы обновить тип продуктов на основе идентификаторов в словаре .... Я знаю, что может быть другим способом:

foreach (int item in idsAndTypes.Keys) 
{ 
    Product.Where(product => product.Id == item). 
     Select(product => product).ToList()[0]. 
     Type = idsAndTypes[item]; 
} 

но я хочу сделать это с помощью запроса linq во избежание цикла foreach, есть ли способ сделать это? Пожалуйста, предложите ...

ответ

3

Ну, LINQ действительно для запросов не обновления.

Возможно, есть способ сделать это без цикла, но я думаю, что цикл является самым чистым способом. Однако я бы не использовал этот цикл. У вас есть кое-что, что очень быстро можно найти, и вы просто перебираете через него ... но затем делаете поиск (эффективно) в медленной структуре данных с точки зрения поиска. Я хотел бы сделать это:

foreach (Product p in products) 
{ 
    int type; 
    if (idsAndTypes.TryGetValue(product.Id, out type)) 
    { 
     p.LinkedProductType = type; 
    } 
} 

Одно различие здесь - это будет обновлять все продукты в списке со значениями в словаре; ваш текущий код будет производить только продукт в списке с данным ID. Надеюсь, это не проблема.

+0

спасибо, что сэр за ответы ... –

2

Ваш образец кода довольно запутан. Но я думаю, что вы хотите:

products = products.Select(p => 
    { 
    p.LinkedProductType = idAndTypes[p.ID]; 
    return p; 
    } 
); 

Хотя это должно достичь цели, я бы считал злоупотребление LINQ.

Смежные вопросы