Linq Join With Include Statement

IQueryable<Employee> emps = CreateObjectSet<Employee>()
                                  .Include(u => u.Departments)
                                  .AsQueryable();
IQueryable<Products> prods = CreateObjectSet<Products>().AsQueryable();

CreateObjectSet - ObjectContext CreateObjectSetMethod

        return (from emp in emps
                join prod in prods
                on emp.ProductID equals prod.ProductID
                where emp.EmployeeID == 10
                select employee).ToList();

Проблема заключается в первой строке, я использую оператор include и включаю отделы с сотрудниками, значения возвратов не имеют отделов, поскольку они никогда не включаются. Пожалуйста, предложите что-нибудь.

Это всего лишь демонстрационный запрос, фактический запрос является очень сложным, поэтому, пожалуйста, не предлагайте, чтобы я не пошел с инструкцией join, но просто включал предложение include и where, которое не служит мне в моем сценарии.

Спасибо

Ответ 1

Это известная проблема с include. Вы можете взглянуть на следующую статью Включить в EF

> var results =
>         ((from post in ctx.Posts
>         from blog in post.Blogs
>         where blog.Owner.EmailAddress == "[email protected]"
>         select post) as ObjectQuery<Post>).Include("Comments");

Если это решение не сработает для вас, вы также можете попытаться исправить это, сгруппировав свои данные и выбрав отделы в качестве одного из значений вашего типа.

Механизм фиксации отношения к объекту EF затем "исправит" include для вас.

Ответ 2

Это можно решить с помощью следующего кода:

var query = from emp in emps
            join prod in prods
            on emp.ProductID equals prod.ProductID
            where emp.EmployeeID == 10
            select employee;
var result = query.Include(u => u.Departments)