2011-03-15 49 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