2011-03-15 44 views
1

如何比較和獲取列表產品中的產品,其中p.street == a.street 列出產品{p1,p2,p3}列表地址{a1,a2,a3}如何比較2列表中的列與linq

例子:

  1. ListProduct = {P1,巴黎} {P2,倫敦} {P3紐約} {P4巴格達} {P5羅馬}
  2. 清單當然住址= {A1,巴黎} {A2,Rome}

3.ListeProductResult = {P1,巴黎} {P5羅馬}

兩種解決方案都工作得非常好謝謝,我想添加第二個列表進行比較 CategorieProduct = {C1,C2}

它的工作原理,但什麼是最好的解決方案

var result = from product in ListProduct 
     join address in ListAddresse on product.Street equals address.Street 
     join Categories in ListCategories on product.CategorieNom equals Categorie.CategorieNom select product; 

回答

0

它可以利用這些名單如下進行:(假設Street是我們比較屬性)

var result = productsList 
     .Where(product => addressList 
         .Any(address => address.Street == product.Street)); 
1

這樣做的最好的方法是使用一個join - 這將跨越兩個不同的實體相匹配的屬性

var result = from product in ListProduct 
      join address in ListAddresse on product.Street equals address.Street 
      select product; 

如果給你多重匹配(例如如果您有一個產品的多個匹配地址),那麼您可以另外將Distinct()應用於此查詢的輸出。

對於行動的LINQ的更多示例,請參閱MSDN上的優秀101 linq examples - 包括加入一個部分 - http://msdn.microsoft.com/en-us/vcsharp/ee908647#crossjoin

+0

兩種解決方案都工作得非常好謝謝,我想添加第二個列表進行比較CategorieProduct = {C1, C2} – chadis 2011-03-15 17:15:08

+0

兩種解決方案都工作得非常好謝謝,我想添加第二個列表進行比較 CategorieProduct = {C1,C2} 它的工作原理,但什麼是最好的解決方案ListAddresse VAR的結果=從產品中ListProduct 加盟地址在產品上。街道等於地址。街道 加入分類在List類上的product.CategorieNom等於Categorie.CategorieNom選擇產品; – chadis 2011-03-15 17:36:03

+0

我看不到你是一個全新的問題 - 但它看起來像你有正確的想法 - 只是不斷添加所需的其他連接。請注意,使用「join」是有效的,因爲它作爲JOIN映射回SQL數據庫 - 而數據庫引擎非常擅長JOIN – Stuart 2011-03-15 18:13:53