我正在学习实体框架,在编辑记录时我收到了这个错误:
LINQ to Entities无法识别方法'System.String ToString()'方法,并且此方法无法转换为商店 表达
请建议如何修复它。这是它的代码。
tblUser obj = new tblUser();
using (var ctx = new TestEntities2())
{
var stud = (from s in ctx.tblUsers
where s.Id.ToString() == RouteData.Values["Id"].ToString()
select s).FirstOrDefault();
obj.Fname = model.Fname;
obj.Lname = model.Lname;
obj.Username = model.UserName;
obj.Email = model.Email;
obj.PhoneNumber = model.PhoneNumber;
int num = ctx.SaveChanges();
}
答案 0 :(得分:2)
我认为您收到错误是因为RouteData.Values["Id"]
作为对象传递,但基础类型是字符串。
如果您期待Guid,那么您应首先解析RouteData值并将Guid与Guid进行比较。这通常比将字符串与字符串比较更好。这里有一些示例代码可以帮助您入门。从用户接收数据时,应始终先检查其有效性。
using (var ctx = new TestEntities2())
{
Guid routeId;
if (Guid.TryParse(RouteData.Values["Id"].ToString, out routeId))
{
// var stud = (from s in ctx.tblUsers
// where s.Id.ToString() == RouteData.Values["Id"].ToString()
// select s).FirstOrDefault();
var stud = ctx.tblUsers.Find(routeId); // simpler and faster
// Always check that the query returned something
if (stud != null)
{
// Do stuff
}
}
else
{
// display a message to the user that something went wrong
}
}