Я пытаюсь изучить выражения Linq/Lambda
и застрял где-то.Как использовать linq `Except` с несколькими свойствами с другим классом?
Что я делал
я создал два класса со свойствами, которые имеют некоторые общие свойства в них. Классы похожи (это тестовый код).
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
, но я не уверен, как реализовать его для двух разных типов классов. Таким образом, либо объединение вышеуказанного запроса в один запрос, либо каким-либо другим способом встраивать пользовательский Comparer
для двух разных типов классов. Или есть другой простой способ?
Я не вижу никаких доказательств в вашем коде, используя GetHashCode. Я знаю, что это деликатный вопрос сам, но если вы хотите, чтобы мы помогли вам, вы должны, по крайней мере, представить код, который SUPPOSED использовать GetHashCode. – S22
Как я уже сказал, в настоящее время я использую два отдельных запроса, чтобы получить результат. Я думал о реализации 'IEqualityComparer', но я не был уверен, как реализовать« GetHashCode », поэтому я не включил здесь. Как вы знаете, реализуете ли вы 'IEqualityComparer'. Затем вам нужно реализовать 'GetHashCode' – user2745246
Извините, но при чтении большего количества бросков ваш пост был наиболее информативным, поэтому мои извинения. Я понимаю, что вы хотите реализовать IEqualityComparer. – S22