LINQ to Entities无法识别方法'System.Collections.Generic.Dictionary`2 [System.Int32,System.String] ToDictionary [英] LINQ to Entities does not recognize the method 'System.Collections.Generic.Dictionary`2[System.Int32,System.String] ToDictionary
问题描述
我正在尝试从数据库中检索存储在Employee表中的EmployeeDTO
列表.每个员工可以拥有一个或多个专业.专业存储在OrganizationSpecialtyType
中. Employee
和OrganizationSpecialtyType
通过EmployeeSpecialty
表与多对多"相关.
I am trying to retrieve list of EmployeeDTO
from DB which are stored in Employee table. Every employee can have one or more specialty. Specialty are stored in OrganizationSpecialtyType
. Employee
and OrganizationSpecialtyType
are related with "many-to-many" via EmployeeSpecialty
table.
我正在使用以下查询,但出现了类似于标题中的异常:
I'm using the following query for that, and got an exception like in title:
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,
Specialty = p.EmployeeSpecialty
.ToDictionary(d => d.OrganizationSpecialtyType.SpecialtyTypeID, d => d.OrganizationSpecialtyType.Name)
}
);
在EmployeeDTO
类中,属性Specialty
键入public Dictionary<int, string>
.
如果执行此查询,则一切正常:
If I execute this query, everything works normally:
var spec = _context.Employee.Where(p => p.EmployeeID == -9070).FirstOrDefault()
.EmployeeSpecialty.ToDictionary(d =>
d.OrganizationSpecialtyType.SpecialtyTypeID,
d => d.OrganizationSpecialtyType.Name);
如何解决我的第一个查询以获得具有特殊性的EmployeeDTO
?
How I can solve my first query to obtain EmployeeDTO
with specialties?
谢谢.
推荐答案
您可以先选择匿名类型,然后再设置字典.
You can select to anonymous type first, then set the dictionary later.
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;
});
这篇关于LINQ to Entities无法识别方法'System.Collections.Generic.Dictionary`2 [System.Int32,System.String] ToDictionary的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!