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

时间:2017-11-01 18:42:45

标签: c# linq icollection

我需要一些帮助...我有一个嵌套ICollection的实体,当我需要按工作(AdjudicationHead)和AdjYearFFI创建一个组时,我无法设置{ {1}}作为群组的属性。

实体:

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; }
}

错误:

  

'System.Collections.Generic.ICollection没有   包含AdjYearFFI'

的定义

1 个答案:

答案 0 :(得分:1)

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

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

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

现在,在您的query中,您有一个键控集合,其中您的密钥具有匿名类型,其中包含WorkAdjYearFFI字段,并且该元素具有{{1}对象。