2014-09-18 116 views
2

我想从Employee数据库中检索存储在Employee表中的EmployeeDTO列表。每个员工都可以拥有一个或多个专业。专业性存储在OrganizationSpecialtyType中。 Employee和OrganizationSpecialtyType通过EmployeeSpecialty表与“多对多”相关。LINQ to Entities无法识别方法'System.Collections.Generic.Dictionary`2 [System.Int32,System.String] ToDictionary

我用下面的查询为,得到了异常喜欢在标题:

var q = _context.Employee.Where(p => employeeEMIIDs.Contains(p.EmployeeID)) 
      .Select(p => new EmployeeDTO 
            { 
             EmployeeID = p.EmployeeID, 
             GenderTypeID = p.GenderTypeID, 
             FirstName = p.FirstName, 
             LastName = p.LastName, 
             Name = p.Name, 
             MiddleName = p.MiddleName, 
             DOB = p.DOB, 
             Suffix = p.Suffix, 
             Title = p.Title, 
             Sepcialty = p.EmployeeSpecialty 
                  .ToDictionary(d => d.OrganizationSpecialtyType.SpecialtyTypeID, d => d.OrganizationSpecialtyType.Name) 
            } 
         ); 

在EmployeeDTO类属性的专业是公共型词典。

如果我执行这个查询,一切工作normaly:

  var spec = _context.Employee.Where(p => p.EmployeeID == -9070).FirstOrDefault().EmployeeSpecialty.ToDictionary(d => d.OrganizationSpecialtyType.SpecialtyTypeID, d => d.OrganizationSpecialtyType.Name); 

我怎样才能解决我的第一次查询,以获得EmployeeDTO与特色?

谢谢

回答

6

您可以先选择匿名类型,然后再设置字典。

var q = _context.Employee.Where(p => employeeEMIIDs.Contains(p.EmployeeID)) 
    .Select(p => new 
    { 
     Employee = new EmployeeDTO 
     { 
      EmployeeID = p.EmployeeID, 
      GenderTypeID = p.GenderTypeID, 
      FirstName = p.FirstName, 
      LastName = p.LastName, 
      Name = p.Name, 
      MiddleName = p.MiddleName, 
      DOB = p.DOB, 
      Suffix = p.Suffix, 
      Title = p.Title 
     }, 
     Specialty = p.EmployeeSpecialty 
      .Select(d => new 
      { 
       d.OrganizationSpecialtyType.SpecialtyTypeID, 
       d.OrganizationSpecialtyType.Name 
      }) 
    })      
    .AsEnumerable() 
    .Select(a => 
    { 
     a.Employee.Specialty = a.Specialty 
      .ToDictionary(d => d.SpecialtyTypeID, d => d.Name); 
     return a.Employee; 
    }); 
+2

如何从此获得IQueryable – user1744973 2016-01-09 05:01:26

相关问题