2010-03-04 1 views
1

내 LINQ 쿼리가 아래 예상 출력을 생성하지 않습니다. 기본적으로 table2.code와 table2.class에 해당하는 table3.cost의 합계이며 table1.alias에 의해 분류되고 table1.priority에 의해 정렬됩니다. DataSet에 두 개의 DataRelation을 추가했습니다.LINQ - DataSet.DataRelation을 사용하여 이러한 테이블을 조인하고 하나의 필드를 합계 할 수 있습니까?

ds.Relations.Add("Table1Table2", ds.Tables[1].Columns("ID"), ds.Tables[2].Columns("ParentID"); 
ds.Relations.Add("Table2Table3", 
    new DataColumn[] { ds.Tables[2].Columns["Code"], ds.Tables[2].Columns["Class"] },    
    new DataColumn[] { ds.Tables[3].Columns["Code"], ds.Tables[3].Columns["Class"] }); 

var query = from aliases in table1.AsEnumerable() 
    join children in table2.AsEnumerable() on aliases("ID") equals children("ParentID") 
    orderby aliases("priority") 
    select new 
    { 
     Name = aliases("alias"), 
     Cost = 
      from data in table3.AsEnumerable() 
      group data by new { code = data("code"), classcode = data("class") } 
      into datatemp 
      select new 
      { 
       cost = datatemp.Sum(x => x("cost")) 
      } 
    }; 

내가 잘못하고있는 아이디어가 있습니까? 미리 감사드립니다!

table2: children records joined to table1 by ParentID (1-to-many) 
----------------- 
code class ParentID 
code1 class1 1 
code2 class2 1 
code3 class3 2 
code4 class4 4
table3: data, joined to table2 by class and code (1-to-many) 
----------------- 
code class cost 
code1 class1 1.00 
code1 class1 10.00 
code1 class1 26.00 
code2 class2 5.00 
code2 class2 0.00 
code3 class3 1000.00

table1: list of aliases and priorities 
----------------- 
alias priority 
alias1 1 
alias2 2 
alias3 4 
alias4 3

예상 출력 :

alias1 42.00 
alias2 1000.00 
alias4 0.00 
alias3 0.00

답변

0
var query = from x in Table1.AsEnumerable() 
orderby x.Field<int>("Priority") 
select new { 
    Name = x.Field<string>("alias"), 
    TotalCost = x.GetChildRows("Table1Table2") 
      .Sum(c => c.GetChildRows("Table2Table3") 
        .Sum(tx => tx.Field<decimal>("cost"))) 
}; 
관련 문제