2013-04-01 2 views
0

의 집합을 반환 내가 가지고과 같이 사용자의 속성을 설정하는 코드 :LINQ 결과

GetUserROB, GetUserIDGetUserActive 모든과 같이 유사
us = new UserSession(); 
us.EmailAddr = emailAddr; 
us.FullName = fullName; 
us.UserROB = GetUserROB(uprUserName); 
us.UserID = GetUserID(uprUserName); 
us.UserActive = GetUserActive(uprUserName); 

:

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 및 활성 속성을 모두 할당 할 수 있습니까? 이 작업을 수행하는 데 3 개의 별도 기능이 필요하지 않습니다.

답변

2

만약 내가 제대로 이해하고 난 당신이 같은 것을 할 수 있다고 생각하십시오 select new 당신은 당신이 원하는만큼 특성을 배치 할 수 있습니다, 이러한 방법으로

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

} 

당신 하나의 라운드 트립에서 여러 속성을 데이터베이스에서 가져와 나중에 처리 할 수 ​​있습니다.

예제에서 알 수 있듯이 UserSession을 매개 변수로 전달합니다. 다른 방법으로 채워진 다른 속성을 이미 보유하고 있습니다.

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