Сначала я использую конструктор Entity Framework, и мне нужно создать пользовательские объекты модели, начиная с объектов db. Я не хочу использовать IEnumerable, потому что он будет запрашивать слишком много полей.
Цель состоит в том, чтобы удалить внутренний выбор внутри этой функции:
using (var db = new dbEntities())
{
var departments= db.departments
.Include(p => p.employee)
.Where(...)
.Select(p => new CustomDepartmentModel()
{
ID = p.ID,
Employees = p.employee
.Select(q => new CustomEmployeeModel()
{
ID = q.ID,
Name= q.Name
}).ToList()
});
return departments.ToList();
}
с помощью этой функции:
public static IQueryable<CustomEmployeeModel> ToModel(this IQueryable<employee> Employee)
{
return Employee.Select(u => new CustomEmployeeModel()
{
ID = u.ID,
Name = u.Name
});
}
Но я всегда получаю сообщение об ошибке: «LINQ to Entities не распознает метод ToModel».
Я безуспешно пытался использовать его следующим образом:
Employees = p.employee.AsQueryable().ToModel().ToList() //1
Employees = db.Entry(p).Collection(f => f.employee).Query().ToModel().ToList() //2
Я думаю, что мне нужно использовать что-то вроде этого:
public static System.Linq.Expressions.Expression<Func<IQueryable<employee>, IQueryable<CustomEmployeeModel>>> ToModel()
{
return p => p.Select(u => new CustomEmployeeModel()
{
ID = u.ID,
Name = u.Name
});
}
но я действительно не могу понять, как его использовать.