我的 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