首页 > 解决方案 > 为什么一种类型的列表没有转换为另一种类型?

问题描述

根据模块名称,我想返回不同类型的不同列表,但问题是我无法更改每个的返回类型,所以我编写了一个具有相同属性但它不起作用的泛型类。如何实现它。

     public List<Models.TasksList> Get(string module)
            {
                //var query= "";
                
                using (var context = new TasksPlanEntities())
                {
                    if (module == "PEMS")
                    {
                        var query = from st in context.PIRTaskLists
                                    select st;
                        return query.ToList<Models.TasksList>();
                else if (module == "PSVMS")
                {
                    var query = from st in context.PSVMS_EnggData
                                select st;
                      return query.ToList<Models.TasksList>();
                }
                    }}

任务列表

 public class TasksList
    {
        public int OperationID { get; set; }

        public string PIRCode { get; set; }

        public string TaskName { get; set; }

        public string OperationNo { get; set; }

        public string OperationCode { get; set; }

        public string OperationDescription { get; set; }

        //public static explicit operator TasksList(ObjectResult<GetTaskPlans_EPICOR_Result> v)
        //{
        //    throw new NotImplementedException();
        //}

        public string Resource { get; set; }

        public string NDTResources { get; set; }

        public float Duration { get; set; }

        public string RequiredEquipmentStatus { get; set; }

        public string TimeBaseInterval { get; set; }

        public DateTime StartDate { get; set; }

        public DateTime LastInspDate { get; set; }

        public DateTime NextInspDate { get; set; }

        public string FunctionalLocation { get; set; }
    }

抛出错误无法隐式转换为system.collection.generic.list<Models.TasksList>

即使 TasksList 类的名称完全相同。我尝试了一切,但没有成功。为什么会这样?

为什么会发生这种情况,因为它是相同的结构。

更新:

public virtual DbSet<PIRTaskList> PIRTaskLists { get; set; }

 public partial class PIRTaskList
    {
        public int OperationID { get; set; }
        public string PIRCode { get; set; }
        public string TaskName { get; set; }
        public Nullable<int> OperationNo { get; set; }
        public Nullable<int> Counter { get; set; }
        public string OperationCode { get; set; }
        public string OperationDescription { get; set; }
        public string Resource { get; set; }
        public string NDTResources { get; set; }
        public Nullable<double> Duration { get; set; }
        public string RequiredEquipmentStatus { get; set; }
        public string TimeBaseInterval { get; set; }
        public string InspectionType { get; set; }
        public string TimeBaseInterval_UOME { get; set; }
        public string Description { get; set; }
        public Nullable<System.DateTime> StartDate { get; set; }
        public Nullable<System.DateTime> LastInspDate { get; set; }
        public string Remarks { get; set; }
        public Nullable<System.DateTime> NextInspDate { get; set; }
        public Nullable<System.DateTime> IntermediateDue { get; set; }
        public Nullable<System.DateTime> ThroughDue { get; set; }
        public string DueDate { get; set; }
        public string GroupStatusID { get; set; }
        public Nullable<int> StatusID { get; set; }
        public Nullable<int> EnggDataID { get; set; }
        public string FunctionalLocation { get; set; }
        public Nullable<System.DateTime> CreatedOn { get; set; }
        public Nullable<int> CreatedBy { get; set; }
        public Nullable<System.DateTime> ModifiedOn { get; set; }
        public Nullable<int> ModifiedBy { get; set; }
        public string PersonName { get; set; }
        public string CostPerHour_Dollar { get; set; }
    }

标签: c#

解决方案


这很简单,没有什么可以允许将列表PIRTaskList隐式转换为TasksList. 类共享相同的属性名称这一事实是无关紧要的。

您有很多选择,您选择哪一个完全取决于您的项目/团队以及您对我们没有的系统的了解。

  • 用于query.Select(x => new TasksList ...).ToList()手动转换项目
  • 使用带有 a 的隐式/显式转换.Select
  • 使用像 AutoMapper 这样的库
  • 使用List<dynamic>/ List<object>(并失去类型安全性)
  • 可能有更多我现在想不到的选择

推荐阅读