c# - 为什么一种类型的列表没有转换为另一种类型?
问题描述
根据模块名称,我想返回不同类型的不同列表,但问题是我无法更改每个的返回类型,所以我编写了一个具有相同属性但它不起作用的泛型类。如何实现它。
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; }
}
解决方案
这很简单,没有什么可以允许将列表PIRTaskList
隐式转换为TasksList
. 类共享相同的属性名称这一事实是无关紧要的。
您有很多选择,您选择哪一个完全取决于您的项目/团队以及您对我们没有的系统的了解。
- 用于
query.Select(x => new TasksList ...).ToList()
手动转换项目 - 使用带有 a 的隐式/显式转换
.Select
- 使用像 AutoMapper 这样的库
- 使用
List<dynamic>
/List<object>
(并失去类型安全性) - 可能有更多我现在想不到的选择
推荐阅读
- r - 如何在 R 中使用字符串搜索从大型 SpatialPolygonsDataFrame 中删除多边形子集?
- node.js - 将应用部署到应用引擎时缺少环境变量
- c - 如何正确地将字符添加到 C 语言中的 C 字符串?
- java - 在 Android 上增强基本颜色类
- c# - 我将如何使用这个工厂类,有什么意义?
- ios - Xamarin UI 测试 IOS 设备错误:Xamarin.UITest.XDB.Exceptions.DeviceAgentException:无法安装 DeviceAgent
- visual-studio - MFC EditBrowse 控件在运行时不显示文件夹图标
- python - 为什么 'encode("utf-8", 'ignore').decode("utf-8")' 在 Python 3 中不去除非 UTF8 字符?
- mysql - Node.js 从 MySQL 解密加密字符串导致 EVP_DecryptFinal_ex:wrong final block length
- regex - 如何只匹配一个字母单词