2013-05-23 5 views
0

아래 테이블과 비슷한 테이블이 있습니다. 내가 LINQ를 사용하는 것을 시도하고있다linq는 목록의 열을 반복합니다.

Branch  Dept  Product ID Product Val Product Date 
Branch 1  Dept 1  ID 1  1  5/23/2013 
Branch 1  Dept 1  ID 2  1  5/23/2013 
Branch 1  Dept 2  ID 3  1  5/23/2013 
Branch 2  Dept 11  ID 4  1  5/23/2013 
Branch 2  Dept 11  ID 5  1  5/23/2013 
Branch 2  Dept 11  ID 6  1  5/23/2013 
Branch 3  Dept 21  ID 7  1  5/23/2013 

같은 개체에 개체의 컬렉션으로 이것을로드 (LINQ에 신인 오전) :

Products = { Branch1 { Dept1 {ID1,ID2}, 
         Dept2 {ID3}}, 
      Branch2 { Dept11 {ID4, ID5, ID6}}, 
      Branch3 { Dept21 {ID7 } 
      } 

그리고 비트는 하드 야간 작업을 시도했지만 수 올바른 해결책을 얻지 못한다. 지금까지 다음 코드를 달성했습니다. ProductsList가 초기에 어떤 도움이 많이 감사합니다 전체 테이블의 날짜 목록

목록 객체입니다

var branches = (from p in ProductsList 
    select p.Branch).Distinct(); 
var products = from s in branches 
    select new 
    { 
     branch = s, 
     depts = (from p in ProductsList 
      where p.Branch == s 
      select new 
      { 
       dept = p.Dept, 
       branch = s, 
       prod = (from t in ProductsList 
        where t.Branch = s 
        where t.Dept == p.Dept 
        select t.ProductID) 
      }) 
    }; 

. 미리 감사드립니다!

+0

중복 가능성 [어떻게 I 계층 데이터를 그룹화하여 LINQ? (http://stackoverflow.com/questions/2230202/how-can-i-hierarchically-group-data-using-linq) – Damith

답변

0

정말 linq을 사용하고 싶다면 나는 soemthing에 갈 것이다.

언젠가 약간의 foreach가 훨씬 더 명확합니다! 첫 번째 사전 키 Branch입니다

var myDic = ProductList 
       .GroupBy(m => m.Branch) 
       .ToDictionary(
        m => m.Key, 
        m => m.GroupBy(x => x.Dept) 
          .ToDictionary(
           x => x.Key, 
           x => x.Select(z => z.ProductId))); 

결과가

Dictionary<string, Dictionary<string, IEnumerable<string>>> 

될 것입니다, 내부 사전 키 Dept이며, 문자열 목록은 원하는 결과를 correpond하는 것

ProductId이다.

+0

라파엘과 데이브 감사합니다. 두 솔루션 모두 효과적이었고 Raphael은 내 시나리오에 더 적합했습니다. – user2412777

0

어쩌면 이렇게 될까요?

Products. 
    .Select(prop => prop.Branch) 
    .Distinct() 
    .Select(b => new 
    { 
     Branch = b, 
     Departments = Products 
      .Where(p => p.Branch == b) 
      .Select(p => p.Dept) 
      .Distinct() 
      .Select(d => new 
      { 
       Products = Products 
        .Where(p => p.Department == d) 
        .Select(p => p.ProductID) 
        .Distinct() 
      }) 
    })