为什么我不能将Linq的结果转换为SQL?

时间:2009-01-22 18:37:24

标签: c# asp.net linq-to-sql

我有一个带有SQL函数的Linq to SQL DataContext。虽然检索对象很好,但我想向对象添加属性,同时缩短对象名称。所以我创建了一个对象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类型。我不明白,因为我继承了我正在铸造的类型。

3 个答案:

答案 0 :(得分:2)

由于Linq to Sql函数返回该基类,因此您的对象永远不会是派生类的对象。因此,当试图抛弃时,它无法做到。但是,您可以在类中提供允许此强制转换工作的隐式和显式转换实现。

See here

答案 1 :(得分:1)

问题是您试图将一个Base类的实例添加到Child类。这是无效的,因为Child继承自Base。无法保证从基地到儿童的案件将起作用(这被称为降级)。向上演员(儿童到基地)是安全的。

如果Container属性是Reminder的实例,这将有效。在这种情况下,它似乎不是。

答案 2 :(得分:-1)

不幸的是,你试图贬低哪个C#不支持。您无法从父类型转换为子类型。