如何解决无法将类型'System.Collections.Generic.List <DTO.ProductivityDTO>'隐式转换为'DTO.ProductivityDTO'
因此,我试图从数据库中检索数据以将其显示在表中。 (这是一个WebApi项目)。这个想法是要遍历状态为1的表中的所有产品。将它们放在某个列表中并返回。 为此,我需要将TBL对象转换为DAL。但是我被困在这里。它无法执行转换,因此不愿意返回其他类型的对象。 我试图以各种方式进行转换,但与控制器中的类型不同步。
这是我的代码:(不要看其他功能。最后看功能 getProductivityRequest )
UserController.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());
}
}
}
UserService.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,Date = productivity.Date
};
}
}
}
如果有人知道另一种传输数据的方式,我会很喜欢的。
谢谢!
解决方法
您的方法返回一个ProductivityDTO
:
public static ProductivityDTO GetProductivityRequest()
...但是您正在尝试返回PList
的{{1}}。
您的方法签名应为:
List<ProductivityDTO>
尽管您的评论表明您不能更改方法签名。在这种情况下,您只需要返回一个DTO。如何确定哪个取决于您。但是,如果它只是public static List<ProductivityDTO> GetProductivityRequest()
为1的一个,那么您可以这样做:
ProductivityStatus
,
您的函数已定义为返回单个 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)));
}
}
。
但是您的功能是建立一个ProductivityDTO
并返回它。
将函数返回类型更改为集合类型,例如:
List<ProductivityDTO>
或
public static List<ProductivityDTO> GetProductivityRequest()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。