У меня проблемы с созданием пользовательского компаратора для использования в linq.join. Я не очень разбираюсь в linq, поэтому я, вероятно, неправильно понял поведение функции соединения.
Это мой код. Я хочу выполнить простое объединение между этими двумя списками:
List<MyObj> operand1Data = new List<MyObj>()
{
new MyObj() { Var = "1var1", Year = 0 },
new MyObj() { Var = "1var2", Year = 2018 },
};
List<MyObj> operand2Data = new List<MyObj>()
{
new MyObj() { Var = "2var1", Year = 2018 },
new MyObj() { Var = "2var2", Year = 2019 },
new MyObj() { Var = "2var3", Year = 2020 },
};
var result= operand1Data.Join(operand2Data, x => x.Year, y => y.Year, (x, y) => x.Var + y.Var, new TestComparer()).ToList();
Проблема в том, что я хочу, чтобы 0 соответствовал каждому элементу в другом списке, поэтому я создал этот пользовательский компаратор:
public class TestComparer : IEqualityComparer<int>
{
public bool Equals(int x, int y)
{
if (x == 0 || y == 0)
{
return true;
}
else
{
return x.Equals(y);
}
}
public int GetHashCode(int obj)
{
return 1;
}
}
Это не работает. Результат содержит только:
"1var12var3"
"1var22var1"
и то, что я ожидал, было:
"1var12var1"
"1var12var2"
"1var12var3"
"1var22var1"
Чего мне не хватает? Может кто-нибудь помочь мне исправить это? Спасибо за вашу помощь.