【问题标题】:How special Entities can be included...?如何包含特殊实体...?
【发布时间】:2013-07-21 11:28:54
【问题描述】:

当 IsActive == true 时,我想包含所有相关的 OrganizationPositions

this.ObjectContext.Employees.Include("OrganizationPositions")

数据库结构

Employee |       OrganizationPositions 
---------       -------------------------
ID              ID , EmployeeID , IsActive

【问题讨论】:

  • 你能给我们更多的背景信息吗?不是(所有)巫师。
  • Employee 表与 OrganizationPositions 表在 OrganizationPositions.EmployeeID = Employee.ID 上加入,我想在 Employee 上包含 OrganizationPositions 但只有 IsActive 字段为真的记录
  • @Masoomian 你不能只加载部分相关实体——要么手动加入和获取数据,要么包括所有相关实体
  • 谢谢你亲爱的lazyberezovsky

标签: c# entity-framework silverlight-4.0


【解决方案1】:

Include 将加载指定关系的所有实体。无法根据条件过滤掉某些实体。

您可以通过手动加入来过滤掉实体:

from e in ObjectContext.Employees
join op in ObjectContext.OrganizationPositions
     on e.EmployeeID equals op.EmployeeID into g
select new {
   Employee = e,
   ActivePositions = g.Where(x => x.IsActive)
}

【讨论】:

  • 是的,但是这段代码返回的是AnonymousType。我需要Employee类型。
  • @Masoomian 不幸的是,如果您尝试在查询中构造员工,您将看到无法在 Linq to Entities 查询中构造员工实体的错误。这里的选项是获取匿名类型并将其映射到客户端的实体。
【解决方案2】:

不可能。但是,如果您正确声明了导航属性,并且您确实需要您所说的情况,则可以使用如下代码:

//...
// First, retrieve all Employees with navigation property
var emps = new ObjectContext.Employees.Include("OrganizationPositions").AsQueryable();

// Then, clear OrganizationPositions of those that aren't active:
foreach (Employee e in emps) {
    if (e.IsActive != true)
       e.OrganizationPositions.Clear();
}

【讨论】:

  • 谢谢你亲爱的阿明。是的,但是这段代码从数据库中获取所有的“OrganizationPositions”然后删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多