我正在玩列表以更好地理解它们。我可以将特定类变量输出到列表选择以压缩以下代码吗?
这是我认为应该可行的 (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 循环。我使用 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());
}
}
最佳答案
我认为您应该将您的 POPSUser
实体投影到电子邮件字符串。使用 Select投影运算符:
DB.OperationsTeam.Select(u => u.UserEmail).Distinct();
旁注:您当前的工作解决方案将从数据库加载整个用户数据(即姓名、电子邮件、ID 等),并在您枚举 OperationsTeam 集时实例化用户实例。但是当你像上面那样进行投影时,它会发生在服务器端,并且会生成只加载必填字段的 SQL:
SELECT DISTINCT
[Extent1].[UserEmail] AS [UserEmail]
FROM [dbo].[OperationsTeam] AS [Extent1]
关于c# - 使用类中的一个变量将输出列表输出到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21122047/