【问题标题】:Anonymous cast type exception匿名强制转换类型异常
【发布时间】:2015-10-29 15:06:46
【问题描述】:

我有一个 LINQ to EF 查询,我在其中选择实体 t_Klantenhistory 的一些列。此查询是数据网格 dgHistory 的项目源。自动生成列设置为 true。当我想从 dgHistory 中获取所选项目时,代码会抛出错误说明:

“无法将类型为 'f__AnonymousType5`5[System.Int32,System.String,System.String,System.String,System.String]' 的对象转换为类型 'AOV.t_Klantenhistory'。”

当我选择所有列时,这真的很好,但我不想要所有列。我该如何解决这个问题?

代码:

public KlantenHistory()
{
    InitializeComponent();
    entities = new AOVEntities();

    var query = (from cust in entities.t_Klantenhistory
                 select new
                 {
                     cust.ID,
                     cust.IdNo,
                     cust.Naam,
                     cust.Voornamen,
                     cust.VolgNo
                 });

    dgHistory.DataContext = entities.t_Klantenhistory;
    dgHistory.AutoGenerateColumns = true;
    dgHistory.ItemsSource = query.ToList();
}

private void btToonHistory_Click(object sender, RoutedEventArgs e)
{
    s_history = new SpecifiekeHistory();
    t_Klantenhistory klant = (t_Klantenhistory)dgHistory.SelectedItem;
    s_history.GetKlantHistory(klant.ID);
    s_history.Show();
}

【问题讨论】:

    标签: c# wpf linq xaml


    【解决方案1】:

    您正在创建一个匿名类型来存储查询结果。所以这不是您检索的t_Klantenhistory 实例。

    您可以通过使用动态关键字来解决问题:

    dynamic klant = dgHistory.SelectedItem;
    s_history.GetKlantHistory(klant.ID);
    

    【讨论】:

    • 非常感谢!像魅力一样工作。我还问了另一个问题,但没有人回答。你愿意帮助我回答这个问题吗?
    【解决方案2】:

    您正试图在您的btnToonHistory_Click 事件中将匿名类型对象转换为t_Klantenhistory。在您的选择语句中,您正在使用 new 关键字,这正在创建一个 anonymous type 对象。

    您可以创建一个新的临时类并对其进行项目。您不能投影到t_Klantenhistory,因为它是从框架生成的类。

    另一种方法是使用select cust 从表中选择所有内容,而不是select new ...,然后隐藏您不想在网格dgHistory 中显示的列。

    【讨论】:

    • @aateeque,OP 正在使用LINQ to EF,并像entities.t_Klantenhistory 一样查询,所以是的,它似乎是通过框架生成的。
    • 立即获取!你的意思是它的 EF 实体名称
    • @aateeque,t_Klantenhistory 是从框架生成的类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多