2014-01-14 35 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

相关问题