C# Linq Join With Include语句
问题是从第一行开始,我使用include语句,将部门包含在返回值不包含部门的员工中,因为它们从未包含在内。请提出一些建议 这只是一个演示查询,实际查询非常复杂,所以请不要建议我不使用join语句,而是简单的include和where子句,这不适合我的场景C# Linq Join With Include语句,c#,linq,entity-framework,C#,Linq,Entity Framework,问题是从第一行开始,我使用include语句,将部门包含在返回值不包含部门的员工中,因为它们从未包含在内。请提出一些建议 这只是一个演示查询,实际查询非常复杂,所以请不要建议我不使用join语句,而是简单的include和where子句,这不适合我的场景 谢谢这是一个已知的包含问题。你可以看看下面的文章 >var结果= >((从ctx.Posts中的post开始) >来自post.Blogs中的blog >其中blog.Owner.EmailAddress==”alexj@microsoft.c
谢谢这是一个已知的包含问题。你可以看看下面的文章
>var结果=
>((从ctx.Posts中的post开始)
>来自post.Blogs中的blog
>其中blog.Owner.EmailAddress==”alexj@microsoft.com”
>选择post)作为ObjectQuery)。包括(“注释”);
如果该解决方案不适用于您,您还可以尝试通过将数据分组并选择部门作为类型中的值之一来修复它
EF实体关系修复机制随后将为您“修复”include。这可以通过以下代码解决:
> 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”);
CreateObjectSet
做什么?我怀疑是否需要AsQueryable
。。。这不应该是必需的。@JonSkeet我认为原因是它返回一个DBSet,而OP最初使用的是DBSetvar@johnny5:我看不出这会如何改变我们显示的代码中的任何内容。@JonSkeet ifCreateObjectSet()
返回一个DbSet
,emps是一个变量,之后对该变量的操作将始终是一个DBSet,因此如果OP没有显示完整的代码,并且试图从另一个IQueryable对其进行赋值,那么它将失败。因此,如果你从一开始就添加AsQueryable
,你就知道你的var是一个IQueryable
@johnny5:这听起来像是一个非常多的猜测,当我们不知道他们曾经使用过var
,我们也不知道他们曾经试图给它赋值。你指定的链接有一个非常干净的解决方案。谢谢lot@Wouter包括持久化到groupBy中并选择到匿名中,但加入不包括为什么?
return (from emp in emps
join prod in prods
on emp.ProductID equals prod.ProductID
where emp.EmployeeID == 10
select employee).ToList();
> 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”);
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)