创建对象列表与使用Linq创建字典的性能比较?

时间:2014-02-21 13:19:23

标签: c# performance linq entity-framework-4

我们在项目中使用Entity框架。为了解释我的问题,我将以学生和教授为例。

  

假设:一位教授可以有多名学生,但每位学生   学生只有教授。

  1. 首先,我会从Student列表中找到不同的ID。

    List<int> profIds= students.Select(s => s.profId).Distinct();
    
  2. 然后我尝试更新他正在做项目的教授的名字,我已经有profesors类型为IEntityRepository<Professor>的对象。我有两种替代方法用于此步骤。

  3. 首先:

    Dictionary<int, string> profDictionary = professors.SearchFor(x => 
            profIds.Contains(x.Id))
           .ToDictionary(p => p.Id, p => 
              string.Format("{0} {1} {p.FirstName,p.LastName));
    
    foreach(var stu in students)
            stu.ProfName = profDictionary[stu.profId];
    

    第二名:

    profList = professors.SearchFor(profIds.Contains(x.Id))
                    .Select(item => new ProfessorDTO()
                    {
                        Id= item.Id,
                        FirstName = item.FirstName,
                        LastName = item.LastName
                    }).ToList();
    
    foreach(var stu in students)
            stu.ProfName = profList.Where(x => x.id == stu.profId).Select(x => 
                 string.Format("{0} {1}", x.FirstName, x.LastName)).FirstOrDefault();
    

    我想知道,在这种情况下哪种方法最好:创建List的字典? 为什么?

1 个答案:

答案 0 :(得分:0)

听起来像GroupBy条款更适合

var studentsByProfessor = students.GroupBy(x => x.profId)
    .Select(g => new
    {
        ProfName = professors.FirstOrDefault(x => x.id == g.Key)
            .Select(x => string.Format("{0} {1}", x.FirstName, x.LastName)),
        Students = g.ToList()
    });