如何在不出现错误的情况下,将带有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();

10-06 06:25