0

我有一个 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();
}
4

2 回答 2

1

您正在尝试将匿名类型对象投射到t_Klantenhistory您的btnToonHistory_Click事件中。在您的选择语句中,您正在使用new关键字,这正在创建一个匿名类型对象。

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

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

于 2013-05-16T12:51:11.813 回答
1

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

您可以使用 dynamic 关键字来解决问题:

dynamic klant = dgHistory.SelectedItem;
s_history.GetKlantHistory(klant.ID);
于 2013-05-16T12:51:20.730 回答