代码之家  ›  专栏  ›  技术社区  ›  Thorin Oakenshield

如何用LINQ求C#中两个表的差

  •  1
  • Thorin Oakenshield  · 技术社区  · 14 年前

    我有两张单子

    List<String> LISTONE=new List<String>() 
    

    List<String> LISTTWO=new List<String>() 
    

    其中包含

    LISTONE   "A"
              "B"
              "C"
    LISTTWO   "A"
              "D"
              "E"
    

    所需的输出是

    LISTTEMP  "B"   
              "C"
              "D"
              "E"
    

    使用LINQ有什么方法可以做到这一点吗

    3 回复  |  直到 14 年前
        1
  •  5
  •   Elisha    14 年前

    可以使用 除外() Concat()

    LISTONE.Except(LISTTWO).Concat(LISTTWO.Except(LISTONE))
    
        2
  •  2
  •   Jamiec    14 年前

    假设您想要“两个列表中没有出现的所有元素”,在这种情况下,正如我上面提到的,“B”也应该在其中。这是最关键的答案。

    one.Concat(two).Except(one.Intersect(two))
    
        3
  •  2
  •   spender    14 年前
    LISTONE.Except(LISTTWO).Union(LISTTWO.Except(LISTONE)) //.Distinct()?
    

    EDIT:Union方法实现了Distinct行为,因此Distinct是多余的。