将父类数据分配给子列表

本文关键字:列表 分配 父类 数据 | 更新日期: 2023-09-27 18:19:15

我有父类

public class ImageInfo {}

和子

public class ImageInfoVM: ImageInfo {
//fields
public ImageInfoVM(ImageInfo img)
{
    this.name = img.name; //etc
}

我正试图从数据库中读取数据与IEnumerable<ImageInfo> model = db.ImageInfo.ToList()并将此数据分配给ImageInfoVM iivm,但没有成功。

我已经尝试了这个解决方案https://stackoverflow.com/a/9885823/632224,我认为这是我需要做的,但我得到错误The class 'ImageInfoVM' has no parameterless constructor。在这个查询中

List<ImageInfoVM> iivm = model.Select(m => new ImageInfoVM(m)).ToList();

有人能帮忙吗?

将父类数据分配给子列表

是不是打错了?

检查构造函数名称 ImageInfoVVM而不是ImageInfoVM

public class ImageInfoVM: ImageInfo {
//fields
    public ImageInfoVVM(ImageInfo img)
    {
        this.name = img.name; //etc
    }

如果没有"无参数构造函数"怎么办?

创建无参数构造函数

我给我的子类添加了空构造函数所以现在它看起来像

     public class ImageInfoVM: ImageInfo {
    //fields
     public ImageInfoVM()
            { }
     public ImageInfoVM(ImageInfo img)
            {
                this.name = img.name; //etc
            }
}

一切都很顺利

您没有提到您使用Entity框架和LINQ to SQL。
你的问题是LINQ to SQL不支持在Select语句中带参数的构造函数。

您的查询正在使用List但不使用IEnumerable类型。
您需要创建模型的List

    List<ImageInfo> model = db.ImageInfo.ToList();

那么你的原始代码也可以在没有参数构造函数的情况下工作

List<ImageInfoVM> iivm = model.Select(m => new ImageInfoVM(m)).ToList();