LINQ:基于字典或映射的聚合行?

时间:2013-04-05 06:36:29

标签: c# linq sharepoint-2010 spmetal

我正在针对SP列表触发q LINQ查询以获取所有涉及的员工,属于他们的项目数量以及总体百分比。

我现在指向数据中的错误:在几行中,3个用户未列为“lastname,firstname”,而是域\ username。我需要将数据中的这种不一致性弄平。

一种可能性是忽略名称中包含“domain”的所有结果。但是,我想将这3个用户名映射到它们的真实姓名。

   domain\user1 => lastname, firstname
   domain\user2 => lastname, firstname
   domain\user3 => lastname, firstname

然后将结果聚合到此用户的“lastname,firstname”行

我的实际代码如下:

public IEnumerable<EmployeeVM> GetAllEmployees()
    {
        EntityList<TicketsElement> Tickets = _db.GetList<TicketsElement>("Tickets");
        return Tickets.Where(b => b.BearbeiterID != null && b.BearbeiterImnName != String.Empty && b.BearbeiterImnName != null)
                      .GroupBy(b => b.BearbeiterImnName)
                      .OrderByDescending(b => b.Count())
                      .Select(b => new EmployeeVM() { Name = b.Key, val = b.Count() });

    }

映射这3个用户并汇总相应结果的最佳方法是什么?

亲切的问候

/编辑:我取得了一些进展。我编辑了GroupBy以反映1个用户。

.GroupBy(b => new { b.BearbeiterImnName, BearbeiterName = b.BearbeiterImnName == @"Domain\User1" ? "lastName, firstName" : b.BearbeiterImnName  })

这会在列表中返回两次用户,这意味着我只需要找到一种方法来聚合具有相同用户名的行。

1 个答案:

答案 0 :(得分:0)

您可以尝试在您的选择中引入条件语句,如下所示:

.Select(b => new EmployeeVM() { Name = !b.Key.Contains("domain") ? b.key : Your new statement,  val = b.Count() });