Почему я не могу преобразовать результат Linq в SQL?

У меня есть 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 к типу Reminder. Я не понимаю, так как я наследую от типа, из которого я выполняю приведение.

реализовано решение оператора: публичный статический неявный оператор Reminder (результат fnRTHU_ReminderByTaskResult)

jpsimard-nyx 22.01.2009 22:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
910
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Вы определенно можете преобразовать родительский Справка в дочернюю ссылку, если базовый объект является дочерним (или дочерним по отношению к дочернему).

JaredPar 22.01.2009 21:48

На самом деле это не имеет ничего общего с тем, что я сказал. Я сказал родительский "тип", а не родительскую "ссылку".

Andrew Hare 22.01.2009 21:50

@Andrew, в вашем ответе говорится, что C# не поддерживает приведение вниз, которое он поддерживает.

JaredPar 22.01.2009 22:01

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

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

Получил два хороших ответа, но тот, который я выбрал в качестве возможного решения, которое будет реализовано, надеюсь, вы не возражаете, проголосовали за свой ответ.

jpsimard-nyx 22.01.2009 22:03
Ответ принят как подходящий

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

Глянь сюда

Другие вопросы по теме