2014-01-14 36 views
1

我在玩列表以更好地理解它們。我可以輸出一個特定的類變量到一個List選項來壓縮下面的代碼嗎?列表使用類中的一個變量輸出到數組

這裏是什麼,我認爲應該是可能的

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循環。我使用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是POPSUser列表與用戶名,用戶名,USEREMAIL等

**更新之後有益的意見(不知道還有什麼地方張貼有用的答案)* 尼斯,乾淨,緊湊,謝謝大家!

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 welcome :)我還添加了評論,顯示了此解決方案與您當前的解決方案之間的巨大差異。就像斯坦利指出的那樣,你不需要創建列表。 –

2

的問題是,.Distinct()將返回「獨特」 POPSUser情況下,這可能不是你想。如果你想不同電子郵件,只需插入Select提取電子郵件值:

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

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

還要注意的是ToList是沒有必要的,因爲string.Join將接受IEnumerable<string>

+0

感謝ToList評論,只是下了一行! – AdamRoof

+0

......是的,你在第一句話中確定的問題正是發生了什麼事情,我在Distinct後正在玩選項,但應該一直在玩OperationsTeam結果。澄清是偉大的,再次感謝。 – AdamRoof

相關問題