如何将输入“Person”(由我的数据库创建)的列表转换为输入“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();
Run Code Online (Sandbox Code Playgroud)
但我只得到一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
任何人都知道如何将列表从类型为 Person 转换为类型为 myPerson 的列表?
或者我如何制作一个“查询”,可以从 Person 转换为 myPerson?
每个myPerson
实例都可以转换为,Person
因为该类myPerson
继承自Person
. 但你不能做相反的事情,将 toPerson
所以myPerson
父级转换为子级。仅当它确实是 a 时才可以这样做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
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用:
personen = query.ToList();
newPerson = personen.Select(p => new myPerson(p)).ToList();
Run Code Online (Sandbox Code Playgroud)