【发布时间】:2016-08-24 01:46:40
【问题描述】:
我有一个列表,其中包含员工的详细信息(他们的姓名、电子邮件)和他们向其报告的经理的电子邮件。 例如。列表 EmpD
- abcd | abcd@gmail.com | abcdmgr@gmail.com
- pqr | pqr@gmail.com | pqrmgr@gmail.com
- pqrs | pqrs@gmail.com | pqrmgr@gmail.com
现在,我需要向每位员工以及经理发送邮件,邮件正文中包含他手下所有员工的姓名。
为此,我使用了两个循环。 一个用于获取经理电子邮件,另一个用于检查经理电子邮件是否与我们从第一个循环中获得的电子邮件匹配。如果是,我会向这些员工发送邮件并将他们添加到另一个新的员工列表中。第二个循环完成后,我有该经理下所有员工的列表。所以现在我用这个新列表给他发邮件。 现在第一个循环进入第二次迭代并重复。
上述方法运行良好,但我想对其进行优化。目前,相同的循环被遍历了两次,尽管我必须创建另一个新列表来存储类似类型的数据。 有没有办法将所有员工分组在同一个经理下,也许是通过 Linq(我是新手)?
我的代码:
int countemp = 0;
while (countemp < listemp.Count())
{
var l = listemp[countemp];
List<EmpRecord> empR = new List<EmpRecord>();
foreach (var e in listemp)
{
if (l.Emp_reportingTo == e.Emp_reportingTo)
{
empR.Add(new EmpRecord() { Emp_Name = e.Emp_Name, EmpIn_Time = e.EmpIn_Time });
SendMailEmp(e.Emp_Name,e.Emp_MailID); //Send mail to Employee
countemp++;
}
}
SendMailMngr(l.Emp_reportingTo, empR); //Send mail to Manager
}
编辑: 在提供的建议的帮助下,我尝试了另一个代码:
var results = from p in listemp
group p.Emp_Name by p.Emp_reportingTo into g
select new { Emp_reportingTo = g.Key, empR = g.ToList() };
它工作正常。但是,我只能在其中获取一列(Emp_Name)。我如何获得另一列,比如 Emp_InTime ?
【问题讨论】:
-
Group by in LINQ的可能重复
-
在 C++ 中
std::map<string, vector<string>>其中第一个string是经理姓名,vector<string>是他的员工。相当于c#中的c++std::map是这里stackoverflow.com/questions/21183414/…