Asp.net mvc 无法将类型MVC.Table1隐式转换为MVC.Models.prodInfo
我正在使用ASP.NETMVC,只是一个初学者。试图对它有一个很好的理解。然而,我得到了这个错误: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
无法将类型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);