【发布时间】:2017-08-19 08:11:49
【问题描述】:
我正在尝试从 ASP.NET MVC 中的选定表中删除一条记录。
这就是我的行动:
public JsonResult DeleteFromTable()
{
int IDtoDelete = Convert.ToInt32(Request.Form["itemId"]);
string MyTableName = Convert.ToString(Request.Form["TblName"]);
bool results = false;
try
{
using (EBContext db = new EBContext())
{
Type tableType = typeof(CourseDesc);
switch (MyTableName)
{
case "CourseTbl":
break;
case "CourseDescTbl":
tableType = typeof(CourseDesc);
break;
case "CourseSubDesc":
tableType = typeof(CourseSubDesc);
break;
case "InternTbl":
tableType = typeof(InternShip);
break;
case "ContactTbl":
Contact cn = db.Contacts.Where(x => x.ID == IDtoDelete); //This line here is throwing error
bool bcn = UtilityMethods<Contact, int>.InsertEntity(db, cn);
break;
}
return new JsonResult { Data = "results", JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
}
catch (Exception ex)
{
string innerMessage = (ex.InnerException != null) ? ex.InnerException.Message : "";
return new JsonResult { Data = "Not Found", JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
}
我创建了一个类,我在其中传递这些参数并调用我的函数:
internal class UtilityMethods<TEntity, Tid> where TEntity : class
{
public static bool DeleteEntity(EBContext dbContext, TEntity entity)
{
try
{
dbContext.Entry(entity).State = EntityState.Deleted;
dbContext.Set<TEntity>().Remove(entity);
dbContext.SaveChanges();
return true;
}
catch (Exception ex)
{
string abc = ex.Message;
return false;
}
}
}
但我遇到了错误:
无法将类型“System.Linq.IQueryable”隐式转换为“EBazar.Models.Contact”。存在显式转换(您是否错过了演员表?)
【问题讨论】:
-
LINQ 方法
Where的返回类型是 IQueryable,您正试图将其分配给 Contact 类的单个对象。这就是您看到此错误的原因。你应该使用FirstOrDefault而不是Where -
那么如何从 IDtoDelete 中选择记录。为了将它传递给我的函数?
-
Contact cn = db.Contacts.FirstOrDefault(x => x.ID == IDtoDelete);(返回单个对象) -
不相关,但将您的签名更改为
public JsonResult DeleteFromTable(string TblName, int itemId)并让DefaultModelbinder发挥作用。 -
联系人 cn = db.Contacts.FirstOrDefault(x => x.ID == IDtoDelete);这解决了我的问题。
标签: c# asp.net asp.net-mvc entity-framework linq