首页 > 解决方案 > 无法隐式转换类型'System.Collections.Generic.List' 到 'DTO.ProductivityDTO'

问题描述

所以我试图从数据库中检索数据以将其显示在表格中。(这是一个 WebApi 项目)。这个想法是从状态为 1 的表中遍历所有 prodactivity。将它们放在某个列表中并返回它。为此,我需要将 TBL 对象转换为 DAL。但在这里我被困住了。它无法执行转换,因此不愿意返回不同类型的对象。我尝试以各种方式进行转换,但它与控制器中的类型不同步。

这是我的代码:(不要看其他函数。看最后的函数getProductivityRequest

用户控制器.cs

using BL;
using DTO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Cors;

namespace WebApiSystem.Controllers
{
    [EnableCors(origins: "*", headers: "*", methods: "*")]//SupportsCredentials = true    
    [RoutePrefix("api/User")]

    public class UserController : ApiController
    {
        [HttpGet]
        [Route("login/{email}/{pass}")]

        public IHttpActionResult LogIn(string email, string pass)
        {
            UserDTO user = BL.UserService.LogIn(email, pass);
            if (user != null)
                return Ok(user);
            return NotFound();
        }

        [Route("register")]
        public IHttpActionResult Register(UserDTO user)
        {    
            return NotFound();
        }

        [HttpPost]
        [Route("productivity")]

        public IHttpActionResult InsertProductivity([FromBody] ProductivityDTO p)
        {
            bool b = BL.UserService.InsertProductivity(p);
            if (b)
                return Ok(b);
            return BadRequest();
        }

        [HttpGet]
        [Route("getProductivityRequest")]

        public IHttpActionResult GetProductivityRequest()
        {
            return Json(BL.UserService.GetProductivityRequest());
        }    
    }
}

用户服务.cs

using DAL;
using DTO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BL
{
    public class UserService
    {
        public static UserDTO LogIn(string email, string pass)
        {
            using (Model2 db = new Model2())
            {
                UserTbl user = db.UserTbl.FirstOrDefault(u => u.UserEmail == email && u.UserPassLogin == pass);
                if (user == null)
                    return null;
                return CONVERTERS.UserConverter.ConvertUsertoDTO(user);
            }
        }
        public static bool InsertProductivity(ProductivityDTO p)
        {
            using (Model2 db = new Model2())
            {
                //conver dal to dto
                ProductivityTbl prod = BL.CONVERTERS.ProductivityConverter.ProductivityDal(p);
                prod.ProductivityStatus = 1;
                db.ProductivityTbl.Add(prod);
                db.SaveChanges();
                return true;
            }
            return false;
        }

        public static ProductivityDTO GetProductivityRequest()//Here I can not convert
        {
            using (Model2 db = new Model2())
            {
                List<ProductivityDTO> PList = new List<ProductivityDTO>();

                foreach (var item in db.ProductivityTbl.ToList())
                {
                    if(item.ProductivityStatus==1)
                    {
                        ProductivityDTO prod = BL.CONVERTERS.ProductivityConverter.ConvertProductivitytoDTO(item);                    
                        PList.Add(prod);
                    }                   
                }
                return (PList);//He's unable to return the object

            }
        }
    }
}

ProductivityConverter.cs(如果相关...)

using DTO;
using DAL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BL.CONVERTERS
{
    class ProductivityConverter
    {
   public static ProductivityDTO ConvertProductivitytoDTO(ProductivityTbl productivity) {
            return new ProductivityDTO
            {
                ProductivyCode = productivity.ProductivyCode,
                ProductivityNum = productivity.ProductivityNum,
                ProductivityStatus = productivity.ProductivityStatus,
                UserCode = productivity.UserCode,
                Cmment = productivity.Cmment,
                Date = productivity.Date

            };

        }

        public static ProductivityTbl ProductivityDal(ProductivityDTO productivity)
        {
            return new ProductivityTbl
            {
                ProductivyCode = productivity.ProductivyCode,
                ProductivityNum = productivity.ProductivityNum,
                ProductivityStatus = productivity.ProductivityStatus,
                UserCode = productivity.UserCode,
                Cmment = productivity.Cmment,
                Date = productivity.Date

            };
  
        }
    }
}

如果有人知道另一种传输数据的方法,我会喜欢的想法。

谢谢!

标签: c#asp.net-web-api

解决方案


您的方法返回一个ProductivityDTO

public static ProductivityDTO GetProductivityRequest()

...但你试图返回PList哪个是List<ProductivityDTO>.

您的方法签名应该是:

public static List<ProductivityDTO> GetProductivityRequest()

尽管您的评论表明您无法更改方法签名。在这种情况下,您只需返回一个 DTO。你如何确定哪一个取决于你。但如果它只是一个ProductivityStatus1 那么你可以这样做:

        public static ProductivityDTO GetProductivityRequest()//Here I can not convert
        {
            using (Model2 db = new Model2())
            {
                return BL.CONVERTERS.ProductivityConverter.ConvertProductivitytoDTO(db.ProductivityTbl.FirstOrDefault(p => p.ProductivityStatus == 1)));

            }
        }

推荐阅读