Почему я не могу привести результат Linq к SQL? - PullRequest
1 голос
/ 22 января 2009

У меня есть Linq to SQL DataContext с функциями SQL в нем. Несмотря на то, что объект извлечения хорош, я хотел бы добавить свойство к объекту и в то же время сократить имя объекта. Поэтому я создал объект Reminder, который наследует от объекта Linq to SQL fnRTHU_ReminderByTaskResult со свойством, которое я хотел.

public class Reminder : fnRTHU_ReminderByTaskResult
{
    public string MyProperty {get;set;}
}

Затем, когда функция связывается со списком, я пытаюсь сделать в файле aspx:

<asp:Literal runat="server" Text='<%# ((Reminder)DataBinder.Container).MyProperty %>' />

Где DataBinder.Container имеет тип fnRTHU_ReminderByTaskResult. Это приводит к InvalidCastException, неспособному привести тип объекта fnRTHU_ReminderByTaskResult к типу Напоминание. Я не понимаю, так как я наследую от типа, из которого я кастую.

Ответы [ 3 ]

2 голосов
/ 22 января 2009

Поскольку функция Linq to Sql возвращает этот базовый класс, ваш объект никогда не был объектом вашего производного класса. Поэтому, когда пытаешься бросить, он не может этого сделать. Тем не менее, вы можете предоставить неявные и явные реализации приведения в вашем классе, которые позволили бы этому приведению работать.

Смотрите здесь

1 голос
/ 22 января 2009

Проблема в том, что вы пытаетесь поместить экземпляр базового класса в класс Child. Это недопустимо, потому что Child наследуется от Base. Нет никаких гарантий, что дело от базы до ребенка будет работать (это называется downcaste). Приведения вверх (от ребенка к базе) безопасны.

Это будет работать, хотя свойство Container является экземпляром Reminder. В этом случае это не так.

0 голосов
/ 22 января 2009

К сожалению, вы пытаетесь понизить рейтинг, который C # не поддерживает. Вы не можете преобразовать родительский тип в дочерний.

...