linq 서로 다른 대상 집합 교차 집합

1553 단어
    class Product
    {
        public int ID { get; set; }
        public string SubID { get; set; }
        public double Price { get; set; }
    }
    class SubProduct
    {
        public string ID { get; set; }
    }
            var pList1 = new List<Product>
            {
                new Product {ID = 1, SubID = "AA", Price = 0.1 },
                new Product {ID = 2, SubID = "BB", Price = 0.2 },
                new Product {ID = 3, SubID = "BB", Price = 0.4 },
                new Product {ID = 4, SubID = "AA", Price = 0.7 },
                new Product {ID = 5, SubID = "CC", Price = 0.3 }
            };

            var pList2 = new List<SubProduct>
            {
                new SubProduct { ID="AA" },
                new SubProduct { ID="BB" }
            };

세 가지를 교집합하여 실현하고, 차집합은 앞에서 비연산을 가하면 된다
1、
var result = pList1.Where(x => !pList2.Select(y => y.ID).Contains(x.SubID)).ToList();

2、
var ids = pList2.Select(x => x.ID).Distinct().ToList();
var result1 = pList1.GroupBy(x => x.SubID).Where(x => ids.Contains(x.Key)).SelectMany(x => x).ToList();

3、
var ids = pList2.Select(x => x.ID).Distinct().ToList();
var result = pList1.AsParallel().GroupBy(x => x.SubID).Where(x => ids.Contains(x.Key)).SelectMany(x => x).ToList(); 

좋은 웹페이지 즐겨찾기