我正在使用列表来更好地理解它们。我可以将特定的类变量输出到List选项以压缩以下代码吗?
这是我认为应该可行的 (DB.OperationsTeam。(仅从POPSUser类中选择UserEmail变量))
private string OperationsMembers
{
get
{
List<POPSUser> UniqueList = DB.OperationsTeam.UserEmail.Distinct().ToList();
return string.Join(";", UniqueList);
}
}
预期产出:adam@my.domain; carol@my.domain; bill@my.domain
这是当前的工作代码,但我认为我不需要使用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是一个包含UserID,UserName,UserEmail等的POPSUser列表。
**有用评论后更新(不知道在哪里发表有用的答案) * 很好,干净,紧凑,谢谢大家!
private string OperationsMembers
{
get
{
return string.Join(";", DB.OperationsTeam.Select(u => u.UserEmail).Distinct());
}
}
答案 0 :(得分:4)
我认为您应该将POPSUser
实体投射到电子邮件字符串。使用Select运算符进行投影:
DB.OperationsTeam.Select(u => u.UserEmail).Distinct();
附注:您当前正在使用的解决方案将从数据库(即名称,电子邮件,ID等)加载整个用户数据,并在您通过OperationsTeam集进行枚举时实例化用户实例。但是,当您按上述方式进行投影时,它将在服务器端进行,并将生成仅加载必填字段的SQL:
SELECT DISTINCT
[Extent1].[UserEmail] AS [UserEmail]
FROM [dbo].[OperationsTeam] AS [Extent1]
答案 1 :(得分:2)
问题是.Distinct()
会返回“不同”POPSUser
个实例,这些实例可能不是您想要的。如果您需要不同的电子邮件,只需插入Select
即可提取电子邮件值:
var UniqueList = DB.OperationsTeam
.Select(u => u.UserEmail)
.Distinct()
.ToList();
return string.Join(";", UniqueList);
另请注意,ToList
不需要string.Join
,因为IEnumerable<string>
会接受{{1}}。