2009-10-16 79 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包含的ID和類型,現在我想在列表上使用linq查詢來更新基於詞典中的id的產品類型.... 我知道另一種方式可以如下:

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

非常感謝您先生回答... – 2009-10-16 05:40:04

2

您的示例代碼很混亂。但我認爲,你想要的是:

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

雖然這應該達到的目標,我認爲這是LINQ的濫用。