我有一个LINQ to EF查询,我在其中选择实体t_Klantenhistory的一些列。此查询是datagrid dgHistory的项目源。自动生成列设置为true。当我想从dgHistory获取所选项时,代码会抛出错误说明:
“无法将类型'&lt;&gt; f__AnonymousType5`5 [System.Int32,System.String,System.String,System.String,System.String]'的对象转换为'AOV.t_Klantenhistory'。”< / p>
当我选择所有列时,这工作正常,但我不想要所有列。我该如何解决这个问题?
CODE:
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();
}
答案 0 :(得分:1)
您正尝试在t_Klantenhistory
事件中将匿名类型对象转换为btnToonHistory_Click
。在您的select语句中,您使用new
关键字,即创建anonymous type对象。
您可以创建一个新的临时类和项目。您无法投射到t_Klantenhistory
,因为它是框架中生成的类。
另一种方法是从select cust
而不是select new ...
中选择表中的所有内容,然后隐藏您不希望在网格中显示的列dgHistory
。
答案 1 :(得分:1)
您正在创建一个匿名类型,用于存储查询结果。因此,这不是您检索的t_Klantenhistory
实例。
您可以使用动态关键字解决问题:
dynamic klant = dgHistory.SelectedItem;
s_history.GetKlantHistory(klant.ID);