1

我的 LINQ 查询没有产生下面的预期输出。基本上就是table2.code和table2.class对应的table3.cost之和,按table1.alias分类,按table1.priority排序。我在 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"))
            }
    };

任何想法我做错了什么?提前致谢!

表 1:别名和优先级列表
-----------------
别名优先级
别名1 1
别名2 2
别名3 4
别名4 3
table2:通过 ParentID 连接到 table1 的子记录(一对多)
-----------------
代码类 ParentID
代码 1 类 1 1
代码 2 类 2 1
代码 3 类 3 2
代码 4 类 4 4
table3:数据,按类和代码连接到table2(一对多)
-----------------
代码类费用
代码 1 类 1 1.00
代码 1 类 1 10.00
code1 class1 26.00
代码 2 类 2 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 回答