6

所以基本上我有以下2IEnumerable lists

List A = {"Personal", "Tech", "Social"}
List B = {"Personal", "Tech", "General"}

List A现在我想要实现的是,得到and之间的区别List B,在这种情况下是SocialGeneral

我还需要确定Social是额外的List AGeneral是额外的,List B以便相应地插入和删除。

我也可以有另一个场景

 List A = {"Personal", "Tech"}
 List B = {"Personal", "Tech", "General"}

在这种情况下,它将返回General "

我该怎么做LINQ

4

5 回答 5

4

干得好

var ListA = new List<string> {"Personal", "Tech", "Social"};
var ListB = new List<string> { "Personal", "Tech", "General" };

var insert = ListA.Except(ListB).ToList();
var delete = ListB.Except(ListA).ToList();
于 2013-01-10T12:12:30.280 回答
2

您可以使用List<T>.Except()方法。

产生两个序列的集合差。

        public static void Main(string[] args)
        {
            List<string> A = new List<string> { "Personal", "Tech", "Social" };
            List<string> B = new List<string> { "Personal", "Tech", "General" };

            var result = A.Except(B);

            //Will print "Social"
            foreach (var i in result)
            {
                Console.WriteLine(i);
            }
        }

这是一个DEMO.

对于您的第二种情况;

        public static void Main(string[] args)
        {
            List<string> A = new List<string> { "Personal", "Tech" };
            List<string> B = new List<string> { "Personal", "Tech", "General"};

            var result = B.Except(A);

            foreach ( var i in result )
            {
                Console.WriteLine(i);
            }
        }

这是一个DEMO.

于 2013-01-10T12:10:58.580 回答
1

listA.Except(listB)将为您提供列表 A 中不在列表 B 中的所有项目。而不是相反。

于 2013-01-10T12:09:41.780 回答
1

使用Enumerable.Except

var result = list1.Except(list2).ToList();
于 2013-01-10T12:10:32.163 回答
0
var q = A.Intersect(B);//"Personal" , "Tech"
var r = B.Except(A);//"General"
于 2013-01-10T12:23:45.663 回答