Как использовать linq `кроме` с несколькими свойствами с разным классом?

Я пытаюсь выучитьLinq/Lambda выражения и застрял где-то.

Что я делал

Я создал два класса со свойствами, которые имеют некоторые общие свойства в них. Классы похожи (это тестовый код).

class TestA
    {
        public int Id { get; set; }
        public int ProductID { get; set; }
        public string Category { get; set; }

        public TestA(int id, int procid, string category)
        {
            this.Id = id;
            this.ProductID = procid;
            this.Category = category;
        }
    }

    class TestB
    {
        public int ProductID { get; set; }
        public string Category { get; set; }

        public TestB(int procid, string category)
        {
            this.ProductID = procid;
            this.Category = category;
        }
    }

Затем я создал два списка для них, как,

        List<TestA> testListA = new List<TestA>();
        List<TestB> testListB = new List<TestB>();
        TestA t1 = new TestA(1, 254, "ProductA");
        TestA t2 = new TestA(1, 236, "ProductA");
        TestA t3 = new TestA(1, 215, "ProductB");
        TestA t4 = new TestA(1, 175, "ProductB");
        TestA t5 = new TestA(1, 175, "ProductC");
        testListA.Add(t1);
        testListA.Add(t2);
        testListA.Add(t3);
        testListA.Add(t4);
        testListA.Add(t5);

        TestB tt1 = new TestB(254, "ProdcutA");
        TestB tt2 = new TestB(215, "ProductB");
        TestB tt3 = new TestB(175, "ProductC");
        testListB.Add(tt3);
        testListB.Add(tt2);
        testListB.Add(tt1);

Теперь для результата я хотелt2 как этоProductID матч не вtestListB А такжеt4 как оно соответствуетProductID вtestListB но не то же самоеCategory.
1) мне нужнаList<A> каждой записи, которая: больше не имеетProductID проводится в testListB

который я могу получить как,

  testListA.Select(x => x.ProductID).Except(testListB.Select(x => x.ProductID ));

2) Больше не имеет записи, которая имеет соответствующийProductID а такжеCategory в testListB

который я могу использовать,

   testListA.Where(a => testListB.Any(b => a.ProductID == b.ProductID && a.Category != b.Category));

**Мой вопрос **
Возможно ли два сделать одно выражение linq, чтобы получить результат. Я думал об использовании инструментаIEqualityComparer но я не уверен, как реализоватьGetHashCode это для двух разных типов классов. Таким образом, либо объединение вышеуказанного запроса в один запрос, либо любой другой способ реализации пользовательскихComparer для двух разных типов классов. Или есть какой-то другой простой способ?

Ответы на вопрос(1)

Ваш ответ на вопрос