Как использовать 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
для двух разных типов классов. Или есть какой-то другой простой способ?