首页 > 解决方案 > 最好的扩展方法重载需要 List 类型的接收器

问题描述

最好的扩展方法重载需要 List 类型的接收器我面临这个问题:

list jvdem 不包含 ToModelListJVDET 的定义,最好的扩展重载方法 modelhelper.ToModelListJVDET(List) 需要 list 类型的接收器

所以请检查我的代码并指导我如何解决这个问题

这是我的代码:

// Controller

public IActionResult Index() {
    List<JVDM> jVDMs = new LocationHandler().GetjVDM().ToModelListJVDET();

    return View(jVDMs);
}

// ModelHelper class

public static List<JVDetModel> ToModelListJVDET(this List<JVDetModel> entityJVDetModels) {
    List<JVDetModel> jVDetModel = new List<JVDetModel>();

    foreach (var i in entityJVDetModels) {
        jVDetModel.Add(i);
    }

    jVDetModel.TrimExcess();
    return jVDetModel;
}


// Location Handler

public List<JVDM> GetjVDM() {
    using (myDBContext context = new myDBContext()) {
        return (from c in context.JVDetTable select c).ToList();
    }
}

标签: c#.net-core

解决方案


你的问题在这里:

GetjVDM().ToModelListJVDET();

GetjVDM()List<JVDM>ToModelListJVDET预期中返回List<JVDetModel> entityJVDetModels

您可以执行以下操作:

  1. 将期望更改ToModelListJVDETList<JDVM>
public static List<JVDetModel> ToModelListJVDET(this List<JDVM> JDVMs) {
    List<JVDetModel> jVDetModel = new List<JVDetModel>();

    foreach (var i in JDVMs) {
        jVDetModel.Add(
            // Create the new model
            new JVDetModel() {
                 Propery1 = i.Property1
                 // etc in mapping
            }
        );
    }

    jVDetModel.TrimExcess();
    return jVDetModel;
}
  1. 您可以做的另一件事是从您的 linq 中选择 JVDetModel 并有效地List<JVDetModel>GetjVDM
public List<JVDetModel> GetjVDM() {
    using (myDBContext context = new myDBContext()) {
        return (from c in context.JVDetTable select new JVDetModel {/* Create the model here*/}).ToList();
    }
}

推荐阅读