检索实体时发生错误

时间:2013-12-14 17:29:55

标签: .net entity-framework

我正在学习实体框架,在编辑记录时我收到了这个错误:

  

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();
}

1 个答案:

答案 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
    }
}