将一个类的列表转换为另一个类的列表?

时间:2017-11-04 22:40:56

标签: c# entity-framework

我从Entity Framework调用存储过程并尝试在模型视图类中获取存储过程的结果但是在从实体框架中获取Result类的列表时出现错误 -

下面的代码我尝试了,但是我在尝试投射时遇到错误,我尝试了其他方式也像ConvertAll<>但是没有工作 -

public List<DepartmentModelView> GetDepartmentData()
        {

            using (Model1Container obj = new Model1Container())
            {
                return obj.usp_getDepartment().ToList<usp_getDepartment_Result>().Cast<DepartmentModelView>.ToList();

            }
        }

这是Model.tt

中自动生成的结果类
namespace MvcApplication4.Models
{
    using System;

    public partial class usp_getDepartment_Result
    {
        public Nullable<int> Depid { get; set; }
        public string DepName { get; set; }
    }
}

但是我想让它在DepartmentModelView class-

中返回
 public class DepartmentModelView
    {
        public Nullable<int> Depid { get; set; }
        public string DepName { get; set; }
    }

请建议我该怎么做?

3 个答案:

答案 0 :(得分:1)

如果您的代码的其余部分有效,您可以使用Linq-Select-Projection:

export const selectorCorB = createSelector(
    selectorStateX
    (...arguments) => arguments,
    (x, arguments) => x ? selectorB(...arguments) : selectorC(...arguments)
);

答案 1 :(得分:0)

您可以在usp_getDepartment_Result的另一个部分文件中实现隐式强制转换:

namespace MvcApplication4.Models
{
    public partial class usp_getDepartment_Result
    {
        static public implicit operator DepartmentModelView(usp_getDepartment_Result input)
        {
            return new DepartmentModelView
            {
                Depid = input.Depid,
                DepName = input.DepName
            };
        }
    }
}

然后你现有的代码应该有效。

答案 2 :(得分:0)

使用AutoMapper(来自Nuget)。您可以创建从一个类到另一个类的映射,并且可以在映射操作期间执行各种操作,以用于不是像这样的属性的简单副本的情况。

对于像这样的简单情况,Automapper会在找到具有相同名称和类型的属性时自动启动转换。