Мне не хватает подробностей в вашем ответе, поэтому я не знаю, поможет ли это, но в противном случае просьба дополнить ваш ответ более подробной информацией, особенно частями кода, которые используют эти классы.
Вы можно легко проверить с помощью сопоставления с образцом:
// Creates a Cat, casts to an animal type
Animal myAnimal = new Cat(3);
if(myAnimal is Cat castedAnimalToCat)
{
// myCat is Animal returned true, which means we have a cat object.
// castedAnimalToCat is now a new variable of type Cat
Console.WriteLine($"{castedAnimalToCat.CatPayload}");
}
if(myAnimal is Dog castedAnimalToDog)
{
// ...
}
Так что где-то в вашей логике базы данных c вы можете привести это к нужному операнду. Вы можете делать более причудливые вещи с помощью рефлексии, но с этим вы всегда заботитесь о безопасности времени и сложности.