Linq加入Include声明

时间:2011-10-19 05:55:59

标签: c# linq entity-framework

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子句,这对我的方案不起作用。

由于

2 个答案:

答案 0 :(得分:15)

这是include的已知问题。您可以查看以下文章Include in EF

> var results =
>         ((from post in ctx.Posts
>         from blog in post.Blogs
>         where blog.Owner.EmailAddress == “alexj@microsoft.com”
>         select post) as ObjectQuery<Post>).Include(“Comments”);

如果该解决方案不适合您,您还可以尝试通过对数据进行分组并选择部门作为您的类型中的一个值来修复它。

EF实体关系修正机制将为您“修复”包含。

答案 1 :(得分: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)