1

私の LINQ クエリは、以下の期待される出力を生成しません。基本的には、table2.code に対応する table3.cost と、table1.alias で分類され、table1.priority で並べられた table2.class の合計です。DataSet に 2 つの 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"))
            }
    };

私が間違っていることはありますか?前もって感謝します!

table1: エイリアスと優先順位のリスト
-----------------
エイリアスの優先度
エイリアス1 1
エイリアス2 2
エイリアス3 4
エイリアス4 3
table2: ParentID (1 対多) によって table1 に結合された子レコード
-----------------
コード クラス ParentID
コード1 クラス1 1
コード 2 クラス 2 1
code3 class3 2
code4 class4 4
table3: クラスとコードによって table2 に結合されたデータ (1 対多)
-----------------
コードクラスのコスト
コード 1 クラス 1 1.00
コード1 クラス1 10.00
コード1 クラス1 26.00
code2 class2 5.00
コード 2 クラス 2 0.00
code3 class3 1000.00

期待される出力:

エイリアス1 42.00
エイリアス2 1000.00
エイリアス4 0.00
エイリアス3 0.00
4

1 に答える 1

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")))
};
于 2010-03-11T15:57:50.047 に答える