如何在 LINQ 中按 ICollection 的嵌套 属性 进行分组?

How to group by a nested property of ICollection in LINQ?

我需要一些帮助...我有一个嵌套了 ICollection 的实体,当我需要按 Work (AdjudicationHead) 和 AdjYearFFI 进行分组时,我做不到将 AdjYearFFI 设为 属性 进行分组。

实体:

 public class AdjudicationHead : BaseEntity
 {
     public virtual int Work { get; set; }
     public virtual int AdjYear { get; set; }
     public virtual string AdjType { get; set; }
     public virtual long AdjNumber { get; set; }
     //Navigation
     public virtual ICollection<AdjudicationDetail> AdjudicationDetails { get; set; }
 }

public class AdjudicationDetail : BaseEntity
{
    public virtual int AdjYearFFI { get; set; }

    //FK
     public virtual int AdjYear { get; set; }
     public virtual string AdjType { get; set; }
     public virtual long AdjNumber { get; set; }
    //Navigation
    public virtual AdjudicationHead AdjudicationHead { get; set; }
}

这是我尝试过的:

public object GetDataCurvaInversionActual()
{
    var query = UoW.GetRepository<AdjudicationHead>()
    .GroupBy(q => new { q.Work, q.AdjudicationDetails.AdjYearFFI });
    var entities = query.ToList();
    var result = Mapper.Map<IList<AdjudicationHead>, IList<Dtos.AdjudicationHead>>(entities);
    return result;
}

错误:

'System.Collections.Generic.ICollection does not contain a definition for AdjYearFFI'

这里的问题是 ICollection<AdjudicationDetail>AdjudicationDetail 的集合,而不是 AdjudicationDetail(如评论所述),因此它没有 AdjYearFFI 属性。它只有 ICollection 类型的属性。

如果要对 AdjudicationDetail 进行分组,可以使用此查询:

var query = UoW.GetRepository<AdjudicationDetail>()
.GroupBy(d => new { d.AdjudicationHead.Work, d.AdjYearFFI });

现在,在您的 query 中,您有一个键控集合,其中您的键具有匿名类型,带有 WorkAdjYearFFI 字段,元素具有 AdjudicationDetail对象。