0

我有一些设置用户属性的代码,如下所示:

us = new UserSession();
us.EmailAddr = emailAddr;
us.FullName = fullName;
us.UserROB = GetUserROB(uprUserName);
us.UserID = GetUserID(uprUserName);
us.UserActive = GetUserActive(uprUserName);

whereGetUserROB和所有看起来都像这样GetUserIDGetUserActive

private static string GetUserActive(string userName)
{
    using (Entities ctx = CommonSERT.GetContext())
    {
        var result = (from ur in ctx.datUserRoles
                       where ur.AccountName.Equals(userName, StringComparison.CurrentCultureIgnoreCase)
                       select new
                       {
                           Active = ur.active
                       }).FirstOrDefault();

        if (result != null)
           return result.Active;
        else
           return "N";
     }
  }

它有效,但我认为这不是正确的方法。如何在一次 LINQ 调用中分配 userROB、ID 和 Active 属性?不必有 3 个单独的功能来做到这一点?

4

3 回答 3

2

您可以创建一个接受UserSession对象作为参数的方法,然后在其中设置所有三个属性。我GetUserActive在这里改变了你的一点:

private static void GetUserData(string userName, UserSession user)
    {
        using (Entities ctx = CommonSERT.GetContext())
        {
            var result = (from ur in ctx.datUserRoles
                          where ur.AccountName.Equals(userName, StringComparison.CurrentCultureIgnoreCase)
                          select new
                          {
                              Active = ur.active,
                              ID = ur.ID,
                              //...select all properties from the DB
                          }).FirstOrDefault();

            if (result != null)
                user.UserActive = result.Active;
                user.UserID = result.ID;
                //..set all properties of "user" object
        }
    }
于 2013-04-01T14:12:15.217 回答
2

如果我理解正确,我相信您可以执行以下操作:

private static void GetUserData(string userName, UserSession userSession)
{
    using (Entities ctx = CommonSERT.GetContext())
    {
        var result = (from ur in ctx.datUserRoles
                      where ur.AccountName.Equals(userName, StringComparison.CurrentCultureIgnoreCase)
                      select new
                      {
                          UserActive = ur.active,
                          UserROB = ur.ROB,
                          UserID = ur.ID
                      }).FirstOrDefault();


    }

    if (result != null) {
        userSession.UserActive = result.UserActive;
        userSession.UserROB  = result.UserROB;
        userSession.UserID = result.UserID;
    }

}

您可以在其中select new放置任意数量的属性,这样您就可以在一次往返中从数据库中获取多个属性,并在以后进行处理。

在我给出的示例中,我将 UserSession 作为参数传递,无论如何,您已经拥有其他属性已经从其他方法填充。

于 2013-04-01T14:16:30.163 回答
0

那么您可能会考虑规范化您的域模型并具有Usertype 属性User,然后您的方法将返回所有相关的用户数据。

于 2013-04-01T14:11:48.730 回答