2017-12-07 12 views
-2

외부 목록을 필터링하기 위해 내부 목록 데이터를 기준으로 그룹을 만들기 위해 쿼리를 작성하는 동안 문제가 발생했습니다. 나는내부 목록 데이터로 그룹화

 


    "products" 
    { 
      "id": "97",   
      "name": "YI1",   
      "projects": [ 
       { 

        "id": "92",     
        "name": "MUM", 
        "branches": [ 
         {       
          "id": "62",       
          "name": "ON Service", 
          "geographyid": "84", 
          "geographyname": "North America", 
          "countryid": "52", 
          "countryname": "Canada"     
         } 
        ], 
        "customers": [ 
         { 
          "id": "80", 
          "name": "HEALTH SCIENCES" 
         } 
        ] 

       } 
      ],  

     }, 
     "products" 
     { 
      "id": "96",   
      "name": "YI2",   
      "projects": [ 
       { 

        "id": "94",     
        "name": "HHS", 
        "branches": [ 
         {       
          "id": "64",       
          "name": "Hamilton ON Service", 
          "geographyid": "44", 
          "geographyname": "Asia", 
          "countryid": "58", 
          "countryname": "China"     
         } 
        ], 
        "customers": [ 
         { 
          "id": "40", 
          "name": "SCIENCES" 
         } 
        ] 

       } 
      ],    
      ] 
     } 

같은 컬렉션 구조는 내가 여러 옵션을 시도

 


    "Geography"{ 
     "geographyid": "44", 
     "geographyname": "Asia", 
     "Country" 
     { 

      "countryid": "58", 
      "countryname": "China", 
      "branches" 
      {   
       "id": "94",     
       "name": "HHS 
       "customers" 
       { 
        "id": "40", 
        "name": "SCIENCES" 

        "projects" 
        { 
         "id": "94",     
         "name": "HHS", 
         "products" 
         { 
          "id": "96",   
          "name": "YI2", 
         } 
        } 
       }, 
      } 
     } 
    }, 
    "Geography"{ 
     "geographyid": "84", 
     "geographyname": "North America" 
     "Country" 
     { 
      "countryid": "52", 
      "countryname": "Canada" 
      "branches" 
      {   

       "id": "62",       
       "name": "ON Service", 
       "customers" 
       { 
        "id": "80", 
        "name": "HEALTH SCIENCES" 

        "projects" 
        { 
         "id": "92",     
         "name": "MUM", 
         "products" 
         { 
          "id": "97",   
          "name": "YI1", 
         } 
        } 
       }, 
      } 
     } 
    } 

 

아래로 출력을 반환하고 또한 쿼리 아래에 쓸 수있는 새 컬렉션을 가지고 노력하고 있지만 나는 아직도 아니다 필요한 결과를 얻는다.

var treeGroup = siteList.SelectMany(a => a.projects.Select(b => new { A = a, B = b }).ToList()).ToList() 
.GroupBy(ol => new { ol.B.geographyid, ol.B.geographyname }) 
.Select(gGroup => new TreeNodes 
{ 
    id = gGroup.Key.geographyid, 
    name = gGroup.Key.geographyname, 
    type = Costants.geographyTreeNode, 
    parentid = string.Empty, 
    children = gGroup 
     .GroupBy(ol => new { ol.B.countryid, ol.B.countryname }) 
     .Select(cGroup => new TreeNodes 
     { 
      id = cGroup.Key.countryid, 
      name = cGroup.Key.countryname, 
      type = Costants.countryTreeNode, 
      parentid = gGroup.Key.geographyid, 
      children = cGroup 
       .GroupBy(ol => new { ol.B.id, ol.B.name }) 
       .Select(sGroup => new TreeNodes 
       { 
        id = sGroup.Key.id, 
        name = sGroup.Key.name, 
        type = Costants.branchTreeNode, 
        parentid = cGroup.Key.countryid, 
        children = sGroup 
        .Select(ol => new TreeNodes { id = ol.A.id, name = ol.A.name, type = Costants.siteTreeNode, parentid = sGroup.Key.id, children = new List<TreeNodes>() }) 
        .ToList() 
       }) 
       .ToList() 
     }) 
     .ToList() 
}) 
.ToList(); 

결과를 얻기 위해 루핑 논리를 사용할 수 있지만 필자는이를 피하고 linq 또는 lmbda 표현식을 사용하여 시도해보고 싶습니다.

+2

이 코드를 편집하고 포맷하십시오 .. 눈이 어렵습니다. – MethodMan

+1

루핑을 실제로 시도 했습니까? 코드를 작성하기 전에 먼저 알고리즘을 이해하고 알고리즘의 효율성을 이해해야합니다. 먼저 구조에 데이터를 병합 한 다음 한 단계로 데이터를 트리에 배치하는 것이 좋습니다. – jdweng

답변

0

문제를 해결할 수 있습니다. 나는 고객을위한 추가 매개 변수를 가져 와서 지점에서 selectmany 함수를 사용하여 동일한 코드를 사용했습니다.