>

같은 형식의 데이터가 있습니다

   ID | Category  | Group  | Platform | Count
   --------------------------------------------        
    1  | Accepted  | Public | Windows  | 20
    1  | Completed | Debug  | Mac      | 15

그리고 그런. 이러한 값의 고유 한 조합마다 하나의 행이 있습니다 (예 : 동일한 ID에는 많은 카테고리가있을 수 있고 카테고리에는 많은 그룹이있을 수 있으며 그룹에는 많은 플랫폼 등이있을 수 있음).

문자열 Platform과 Count를 가진 클래스로 시작하는 곳에 이것을 매핑하고 싶은 클래스가 있습니다. 그런 다음 문자열 그룹 및 플랫폼 목록이있는 클래스가 있고, 범주 및 그룹 목록 등이있는 클래스가 있습니다.

C #에서이 클래스로 구문 분석 할 수있는 형식으로 데이터를 그룹화하는 방법을 알아 내려고 노력 중입니다. 나는 현재 이것을하고있다 :

var data = falloffData.GroupBy(sk => new { sk.SID})
    .Select(sg => new
    {
        SID = sg.Key.SID,
        Group = sg.GroupBy(ak => new { ak.AGroup })
        .Select(ag => new
        {
            AGroup = ag.Key.AGroup,
            Category = ag.GroupBy(ck => new { ck.Category })
            .Select(cg => new
            {
                Category = cg.Key.Category,
                Platform = cg.GroupBy(pk => new { pk.Platform })
                .Select(pg => new
                {
                    Platform = pg.Key.Platform,
                    Count = pg.Sum(c => c.TotalCount)
                })
            })
        })
    });

이것은 올바르게 그룹화되지만 다음과 같은 많은 익명 유형으로 IEnumerable로 끝납니다.

{ AGroup = "Production", Category = {System.Linq.Enumerable.WhereSelectEnumerableIteratorf__AnonymousType4, Scratch.Program.FalloffItem>, <>f__AnonymousType5f__AnonymousType7>>>} }

이것을 C # 클래스로 파싱하는 방법이 확실하지 않습니다.

어떤 포인터?

감사합니다!

  • 답변 # 1

    너무 많은 익명 유형을 생성하기 때문에 많은 익명 유형이 표시됩니다.

    구체적인 클래스를 선택/투영하려는 경우 클래스를 선택하고 익명 유형을 사용하지 않아야합니다.

    수업 제공

    internal class SomePlatform
    {
      public string Platform { get; set; }
      public int Count { get; set; }
    }
    internal class SomeCategory
    {
      public string Category { get; set; }
      public IEnumerable<SomePlatform> Platforms { get; set; }
    }
    internal class SomeGroup
    {
      public string AGroup { get; set; }
      public IEnumerable<SomeCategory> Categorys { get; set; }
    }
    internal class SomeClass
    {
      public string SID { get; set; }
      public IEnumerable<SomeGroup> Groups { get; set; }
    }
    
    

    투영 예

    blah.GroupBy(sk => sk.SID) // Group
        .Select(sg => new SomeClass // Select into SomeClass
        {
          SID = sg.Key.SID,
          Groups = sg.GroupBy(ak => ak.AGroup) // Group
                    .Select(ag => new SomeGroup // Select into SomeGroup
                     {
                        AGroup = ag.Key.AGroup,
                        Categorys = ag.GroupBy(ck => ck.Category)  // Group
                                     .Select(cg => new SomeCategory  // Select into SomeCategory
                                      {
                                         Category = cg.Key.Category,
                                         Platforms = cg.GroupBy(pk => pk.Platform) // Group
                                                      .Select(pg => new SomePlatform // Select into SomePlatform
                                                       {
                                                          Platform = pg.Key.Platform,
                                                          Count = pg.Sum(c => c.TotalCount)
                                                       })
                                      })
                     })
        });
    
    

관련 자료

  • 이전 android - 메뉴 이벤트 처리
  • 다음 vba - 메일 항목에 색상 범주를 가져 오거나 할당하는 방법은 무엇입니까?