Asp.net mvc MVC4 Linq数据库调用

Asp.net mvc MVC4 Linq数据库调用,asp.net-mvc,linq,entity-framework,Asp.net Mvc,Linq,Entity Framework,正在开发我的第一个MVCapp。我正在使用MVC4附带的简单成员数据库来管理用户和角色。我的理解是,我必须为下面的Find()调用执行三个步骤:获取登录人员的简单成员身份GUID,使用简单成员身份GUID获取我的信使数据库中的ID,然后将该ID用作Find()中缺少的参数在下面调用以返回要在视图中编辑的模型/记录如何/使用什么作为.Find()调用的参数?我是走对了路,还是让事情变得更复杂了 ps-创建Courier记录时,我将会员身份GUID保存在Courier数据库中Courier ID主键

正在开发我的第一个
MVC
app。我正在使用MVC4附带的简单成员数据库来管理用户和角色。我的理解是,我必须为下面的
Find()
调用执行三个步骤:获取登录人员的简单成员身份
GUID
,使用简单成员身份
GUID
获取我的信使数据库中的ID,然后将该ID用作
Find()中缺少的参数
在下面调用以返回要在视图中编辑的模型/记录

如何/使用什么作为.Find()调用的参数?我是走对了路,还是让事情变得更复杂了

ps-创建Courier记录时,我将会员身份
GUID
保存在Courier数据库中Courier ID主键列之外的单独列中。多谢各位

   public ActionResult EditCourier()
    {
        System.Web.Security.MembershipUser user = Membership.GetUser();
        var providerUserKey = user.ProviderUserKey;
        Guid userId = (Guid)providerUserKey;
        String userIDstring = userId.ToString();

        var model =
            from c in db.Couriers
            where c.CourierMembershipID == userIDstring
            select c.ID;

        Courier courier = db.Couriers.Find();

        if (courier == null)
        {
            return HttpNotFound();
        }
        return View(courier);
    }

MSDN文档说明:

使用主键值尝试查找由 上下文如果实体不在上下文中,则将执行查询 针对数据源中的数据执行和计算,并且为空 如果在上下文或数据中找不到实体,则返回 来源

所以,如果您在Couriers表中将userId作为主键,那么您可以这样使用:

Courier courier = db.Couriers.Find(userId);
否则,应使用标准LINQ查询,然后调用
.FirstOrDefault()
SingleOrDefault()
方法:

Courier courier = db.Couriers.FirstOrDefault(c=>c.CourierMembershipID == userIDstring);
编辑:

我想您从下一个查询中得到此错误:

var model =
            from c in db.Couriers
            where c.CourierMembershipID == userIDstring
            select c.ID;
原因是您从这个查询
IEnumerable
模型中得到的。 要进行此查询以获取单个
Courier
对象,请尝试在末尾调用
.FirstOrDefault()

var model =    (from c in db.Couriers
                where c.CourierMembershipID == userIDstring
                select c.ID).FirstOrDefault();

非常感谢。我把我的问题简化了一点。所以,请让我这样问。我正试图用linq查询返回一条记录到视图中,但是我收到了无法将ienumberable转换为Courier的错误消息非常感谢。首先是在这个问题上的巨大帮助。我也要试试第一道菜。