【问题标题】:Linq include children from collectionLinq 包括来自集合的孩子
【发布时间】:2013-03-23 14:12:21
【问题描述】:

使用 include 方法不包含集合的子项。

var abuseCaseQuery =
  from @event in 
    context.AbuseEvents.Include("AbuseCase.AbuseCaseStatus.Status")
  select new
  {
    @event.SecurityGroupId,
    @event.AbuseCaseId,
    @event.AbuseCase.AbuseCaseStatus
  }
;

var abuseCases = abuseCaseQuery.ToList();

abuseCases 列表包含所有AbuseCasesStatusStatusId,但Status 对象为空。

edmx:

如何填充Status 导航属性?

【问题讨论】:

    标签: c# linq entity-framework include linq-to-entities


    【解决方案1】:

    在 EF 中,当您使用 Select 添加投影时,Includes 将被忽略。

    因此,您必须明确选择所需的所有数据:

    select new
    {
      @event.SecurityGroupId,
      @event.AbuseCaseId,
      @event.AbuseCase.AbuseCaseStatuses
        .Select( acs => new { AbuseCaseStatus = acs, Status = acs.Status } )
    }
    

    这确实会产生一个“扁平”对象,因此您可能想在之后修复对象图:

    foreach( var abuseCase in abuseCases )
    {
      foreach( var acs in abuseCase.AbuseCaseStatuses )
      {
        acs.AbuseCaseStatus.Status = acs.Status;
      }
    }
    

    【讨论】:

    • 我无法选择集合@event.AbuseCase.AbuseCaseStatus.Status。我正在尝试使用 select many 功能但遇到问题。
    • AbuseCaseStatus 表有一个StatusId 列,所以它的Status 导航属性应该是一个Status 对象——不是这样吗?
    • 对不起,我不清楚。是的,AbuseCaseStatus 对象有一个 Status,但在我的选择中,@event.AbuseCase.AbuseCaseStatus 是该 AbuseCase 的所有 AbuseCaseStatus 的集合
    • 我的错 - 我没有仔细观察你的模型。我已经更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多