2014-01-14 2 views
1

나는 그것을 더 잘 이해하기 위해리스트를 가지고 놀고있다. 목록 선택에 특정 클래스 변수를 출력하여 다음 코드를 압축 할 수 있습니까? 여기 목록 클래스에서 하나의 변수를 사용하여 배열에 출력

내가 가능해야한다 생각이다

private string OperationsMembers 
{ 
    get 
    { 
     List<POPSUser> UniqueList = DB.OperationsTeam.UserEmail.Distinct().ToList(); 
     return string.Join(";", UniqueList); 
    } 
} 

예상 출력 (DB.OperationsTeam() POPSUser 클래스에서 바로 USEREMAIL 변수를 선택합니다.) : [email protected]; [email protected]; [email protected]

여기에 현재 작동하는 코드가 있지만 foreach를 사용하여 다른 List 및 루프를 만들어야한다고 생각하지 않습니다. 일부 사용자는 데이터베이스 쿼리 내에서 여러 부서에 있기 때문에 Distinct()를 사용했습니다.

private string OperationsMembers 
{ 
    get 
    { 
     List<string> EmailAddressList = new List<string>(); 

     foreach (POPSUser user in DB.OperationsTeam) 
     { 
      EmailAddressList.Add(user.UserEmail); 
     } 

     if (EmailAddressList.Count > 0) 
     { 
      List<string> UniqueList = EmailAddressList.Distinct().ToList(); 
      return string.Join(";", UniqueList); 
     } 
     else { return ""; } 
    } 
} 

DB.OperationsTeam는 사용자 ID, 사용자 이름과 함께 POPSUser 목록입니다 USEREMAIL 등

** 니스 * 을 (어디 다른 도움이 대답을 게시 몰랐) 유용한 코멘트 후에 UPDATE, 깨끗하고 컴팩트 한 덕분에 모두!

private string OperationsMembers 
{ 
    get 
    { 
     return string.Join(";", DB.OperationsTeam.Select(u => u.UserEmail).Distinct()); 
    } 
} 
+2

BTWm ToList()는 필요하지 않습니다. – SLaks

+0

사용중인 .NET 버전은 무엇입니까? –

+0

Asp.net v4.0. 제목에 대해 미안합니다. 이미 질문 된 질문의 결과를보기를 원하면 제목을 입력합니다. 그런 다음 태그 지정 섹션을 누르면 제목이 기억 나지 않습니다. 그래서 내가 제목에 태그 한 것을 남겨 두지 마라. – AdamRoof

답변

4

POPSUser 엔티티를 이메일 문자열로 투영해야한다고 생각합니다. 투사 Select 연산자를 사용합니다 :

DB.OperationsTeam.Select(u => u.UserEmail).Distinct(); 

사이드 참고 : 현재 작업 솔루션은 데이터베이스에서 전체 사용자 데이터 (예 : 이름, 이메일, 아이디, 등)을로드하고 OperationsTeam 세트 이상 열거 할 때 사용자 인스턴스를 인스턴스화합니다. 위와 같이 프로젝션을 수행 할 때, 그것은 서버 측에서 발생하고 그에만 필수 필드로드 SQL 생성합니다

SELECT DISTINCT 
    [Extent1].[UserEmail] AS [UserEmail] 
FROM [dbo].[OperationsTeam] AS [Extent1] 
+1

완벽! 덧글 및 귀하의 모든 설명을 수정 주셔서 감사합니다;) – AdamRoof

+0

@ AdamRoof 환영 :) 나는 또한이 솔루션과 현재의 솔루션 사이의 큰 차이를 보여주는 의견을 추가했습니다. Stanley가 지적했듯이 목록을 만들 필요가 없습니다. –

2

문제는 .Distinct()가되지 않을 수있다 "별개"POPSUser 인스턴스를 반환 할 것입니다 무엇을 필요. 당신은 별개의 이메일을 원하는 경우에, 바로 이메일 값을 추출하기 위해 Select를 삽입 :

var UniqueList = DB.OperationsTeam 
        .Select(u => u.UserEmail) 
        .Distinct() 
        .ToList(); 

return string.Join(";", UniqueList); 

또한 string.JoinIEnumerable<string>을 받아 들일 때문에 ToList이 필요하지 않습니다 있습니다.

+0

ToList 코멘트 주셔서 감사합니다. 한 줄로 내려갔습니다! – AdamRoof

+0

... 예, 첫 번째 문장에서 확인한 문제는 정확히 무슨 일이 있었는지와 제가 Distinct 이후에 옵션을 가지고 노는 중이었지만 OperationsTeam 결과로 놀았어야 했었습니다. 설명은 훌륭합니다. 다시 한 번 감사드립니다. – AdamRoof

관련 문제