Asp.net mvc 无法将类型MVC.Table1隐式转换为MVC.Models.prodInfo

Asp.net mvc 无法将类型MVC.Table1隐式转换为MVC.Models.prodInfo,asp.net-mvc,entity-framework,linq,Asp.net Mvc,Entity Framework,Linq,我正在使用ASP.NETMVC,只是一个初学者。试图对它有一个很好的理解。然而,我得到了这个错误: 无法将类型MVC.Table1隐式转换为MVC.Model.prodInfo 这是我的密码: 型号 namespace MVC.Models { public class Sample { Database_Entity db; public Sample() { db = new Database_Enti

我正在使用ASP.NETMVC,只是一个初学者。试图对它有一个很好的理解。然而,我得到了这个错误:


无法将类型MVC.Table1隐式转换为MVC.Model.prodInfo

这是我的密码:

型号

namespace MVC.Models
{
    public class Sample
    {
        Database_Entity db;

        public Sample()
        {
            db = new Database_Entity();
        }

        public List<prodInfo> getStuff()
        {

            var que = (from wr in db.Table1
                       join wrc in db.Table2 on wr.ID equals wrc.ID
                       join cd in db.Table3 on wrc.ID equals cd.ID
                       select new prodInfo
                       {
                           Short_ID = wr.ID,
                           Planned_Date = cd.Planned_Date.ToString(),
                           Actual_Date = cd.Actual_Date.ToString()
                       }).ToList();
            return que;
        }
    }

    public class prodInfo
    {
        public string Short_ID { get; set; }
        public string Planned_Date { get; set; }
        public string Actual_Date { get; set; }
    }
}

prodInfo item=db.Table1.Find(ID)此行导致错误。我不明白怎么了,如果有人能帮我,那就太好了。如果需要,我将在编辑中添加视图类。

好!当您希望使用
实体框架
从数据库获取数据时,数据的返回类型为
数据库模型

要解决这个问题,您必须获取像
var
这样的数据并映射到您的对象。比如:

namespace MVC.Controllers
{
    public class HelloController : Controller
    {
        Database_Entity db;
        // GET: Hello
        public ActionResult Index()
        {
            Sample sam = new Sample();
            return View(sam.getStuff());
        }

        public ActionResult Edit(string ID)
        {
            if (ID == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);  
            }
            var result = db.Table1.Find(ID);
            if (item == null)
            {
                return HttpNotFound();
            }
            return View(new prodInfo(){
                                /////
                                });
        }

        [HttpPost]
        public ActionResult Edit(prodInfo model)
        {
            if (ModelState.IsValid)
            {
                db.Entry(model).State = System.Data.Entity.EntityState.Modified;
                return RedirectToAction("Index");
            }

            return View(model);
        } 

    }

在示例类中创建新方法:

    public prodInfo GetProdInfo(string ID)
    {
        var pInfo = (from wr in db.Table1
                   join wrc in db.Table2 on wr.ID equals wrc.ID
                   join cd in db.Table3 on wrc.ID equals cd.ID
                   select new prodInfo
                   {
                       Short_ID = wr.ID,
                       Planned_Date = cd.Planned_Date.ToString(),
                       Actual_Date = cd.Actual_Date.ToString()
                   }).FirstOrDefault(x=>x.Short_ID == ID);
        return pInfo;
    }
并通过调用新方法修改HomeController中的编辑方法:

var result = sam.GetProdInfo(ID);

那么,
db.Table1.Find(ID)
返回类型为
Table1
的对象,而不是
prodInfo
。如果你想要一个
prodInfo
,你需要转换它…你介意举个例子吗,因为我不知道是否有一个内置函数可以为你做这件事。你的
getStuff
函数中已经有一个例子了。。。实际上,您可以只添加一个
getProdInfoByID(string ID)
函数,该函数的作用与
getStuff
相同,但添加一个
where
子句,并返回
FirstOrDefault()
无法隐式地将类型MVC.Models.prodInfo转换为System.Generic.List。您需要将实体转换为DTO/ViewModel。我喜欢使用AutoMapper,但您可以像上面那样手动操作。尝试
prodInfo item=db.Table1.Where(t=>t.ID==ID)。选择(x=>newprodinfo{Short\u ID=x.ID,Planned\u Date=x.Planned\u Date,Actual\u Date=x.Actual\u Date})
var result = sam.GetProdInfo(ID);