代码之家  ›  专栏  ›  技术社区  ›  aponzani

如何使用Linq查找同一集合的两个属性之间的交叉点?

  •  1
  • aponzani  · 技术社区  · 16 年前

    给定一个 IList<Foo> 数据集如下:

    ID   CHILD  PARENT TYPE  
    1   102    101    UPSELL  
    1   103    101    UPSELL  
    2   102    101    BONUS  
    2   104    103    BONUS  
    3   102    101    BONUS  
    4   102    101    PRODUCT  
    4   104    102    PRODUCT  
    

    如何使用Linq查找具有相同ID的父级的子级?

    所需输出为

    ID   CHILD  PARENT TYPE 
    4   102    101    PRODUCT
    
    1 回复  |  直到 16 年前
        1
  •  3
  •   PatrickSteele    16 年前

    我想这就是你要找的。我先按ID分组,这样我可以单独处理每个组,但可能有一种方法可以将其组合成单个查询。

    var grouping = foos.GroupBy(f => f.ID);
    foreach(var g in grouping)
    {
        var result = (from f1 in g from f2 in g where f1.Child == f2.Parent select f1);
        if( result.Any())
        {
            // you have your answer
        }
    }