如何在不出现错误的情况下,将带有typ“person”(由数据库创建)的列表转换为typ“myperson”。
我试过这个:
DataClasses1DataContext d = new
DataClasses1DataContext(MainWindow.mySqlClass.GetConnection());
var query = from pers in d.Person select pers;
personen = query.ToList();
newPerson = personen.Cast<myPerson>().ToList();
但我只得到一个
System.InvalidCastException
。public partial class myPerson : Person
{
public override string ToString()
{
return Name + " " + Nachname;
}
public myPerson(System.Data.Linq.EntitySet<Bilder> bilder, string geschlecht, int iD, string nachname, string name)
{
Bilder = bilder;
Geschlecht = geschlecht;
ID = iD;
Nachname = nachname;
Name = name;
}
}
linq创建的类(只是第一行):
public partial class Person : INotifyPropertyChanging, INotifyPropertyChanged
{
private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
private int _ID;
private string _Nachname;
private string _Name;
private string _Geschlecht;
private EntitySet<Bilder> _Bilder;
有人知道如何将列表从typ person转换为typ myperson的列表吗?
或者,我怎样才能做一个“查询”,提供从person到myperson的转换?
最佳答案
因为myPerson
类继承自Person
,所以每个myPerson
实例都可以强制转换为Person
。但是你不能做相反的事,把aPerson
转换成myPerson
这样父对象就转换成子对象。只有当它真的是一个myPerson
时,才可以这样做,但在本例中不是这样,因此转换失败。
如果您有一个Person
并且想要将其转换为myPerson
您应该提供一个构造函数(或工厂方法),它接受一个Person
实例并初始化(或返回)该myPerson
实例。
public partial class myPerson : Person
{
public myPerson(Person p)
{
_ID = p.Id;
_Nachname = p.Nachname;
_Name = p.Name;
_Geschlecht = p.Geschlecht;
_Bilder = p.Bilder;
}
private int _ID;
private string _Nachname;
private string _Name;
private string _Geschlecht;
private EntitySet<Bilder> _Bilder;
// add properties
}
然后您可以使用:
personen = query.ToList();
newPerson = personen.Select(p => new myPerson(p)).ToList();