2013-04-01 117 views
0

的我有一些代码,设置像这样用户的属性:LINQ返回一组结果

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

其中GetUserROBGetUserIDGetUserActive看起来都差不多,像这样:

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个独立的功能来做到这一点?

回答

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作为参数传递,在任何情况下,您已经有其他方法从其他方法填充alrealdy。

0

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

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