组合两个数据表,并使用linq从第二个表中获取金额
本文关键字:linq 第二个 金额 获取 两个 数据表 组合 | 更新日期: 2023-09-27 17:53:23
我有两个表,如下所示。
表1
╔══════════════╦═════╦════╗
║ NAME ║ AGE ║ ID ║
╠══════════════╬═════╬════╣
║ firstname 1 ║ 20 ║ 1 ║
║ firstname 2 ║ 21 ║ 2 ║
║ firstname 3 ║ 22 ║ 3 ║
║ firstname 4 ║ 23 ║ 4 ║
║ firstname 5 ║ 24 ║ 5 ║
║ firstname 6 ║ 25 ║ 6 ║
║ firstname 7 ║ 26 ║ 7 ║
║ firstname 8 ║ 27 ║ 8 ║
║ firstname 9 ║ 28 ║ 9 ║
║ firstname 10 ║ 29 ║ 10 ║
╚══════════════╩═════╩════╝
表2
╔════════╦══════════╗
║ LINKID ║ QUANTITY ║
╠════════╬══════════╣
║ 1 ║ 1 ║
║ 1 ║ 1 ║
║ 2 ║ 1 ║
║ 2 ║ 1 ║
║ 2 ║ 1 ║
║ 3 ║ 1 ║
║ 3 ║ 1 ║
║ 3 ║ 1 ║
║ 3 ║ 1 ║
║ 4 ║ 1 ║
║ 4 ║ 1 ║
║ 4 ║ 1 ║
║ 4 ║ 1 ║
║ 4 ║ 1 ║
║ 5 ║ 1 ║
║ 5 ║ 1 ║
║ 5 ║ 1 ║
║ 5 ║ 1 ║
║ 5 ║ 1 ║
║ 5 ║ 1 ║
║ 6 ║ 1 ║
║ 6 ║ 1 ║
║ 6 ║ 1 ║
║ 6 ║ 1 ║
║ 6 ║ 1 ║
║ 6 ║ 1 ║
║ 6 ║ 1 ║
║ 7 ║ 1 ║
║ 7 ║ 1 ║
║ 7 ║ 1 ║
║ 7 ║ 1 ║
║ 7 ║ 1 ║
║ 7 ║ 1 ║
║ 7 ║ 1 ║
║ 7 ║ 1 ║
║ 8 ║ 1 ║
║ 8 ║ 1 ║
║ 8 ║ 1 ║
║ 8 ║ 1 ║
║ 8 ║ 1 ║
║ 8 ║ 1 ║
║ 8 ║ 1 ║
║ 8 ║ 1 ║
║ 8 ║ 1 ║
║ 9 ║ 1 ║
║ 9 ║ 1 ║
║ 9 ║ 1 ║
║ 9 ║ 1 ║
║ 9 ║ 1 ║
║ 9 ║ 1 ║
║ 9 ║ 1 ║
║ 9 ║ 1 ║
║ 9 ║ 1 ║
║ 9 ║ 1 ║
║ 10 ║ 1 ║
║ 10 ║ 1 ║
║ 10 ║ 1 ║
║ 10 ║ 1 ║
║ 10 ║ 1 ║
║ 10 ║ 1 ║
║ 10 ║ 1 ║
║ 10 ║ 1 ║
║ 10 ║ 1 ║
║ 10 ║ 1 ║
║ 10 ║ 1 ║
╚════════╩══════════╝
结果表如下所示。
╔══════════════╦═════╦════╦═════╗
║ NAME ║ AGE ║ ID ║ QTY ║
╠══════════════╬═════╬════╬═════╣
║ firstname 1 ║ 20 ║ 1 ║ 2 ║
║ firstname 2 ║ 21 ║ 2 ║ 3 ║
║ firstname 3 ║ 22 ║ 3 ║ 4 ║
║ firstname 4 ║ 23 ║ 4 ║ 5 ║
║ firstname 5 ║ 24 ║ 5 ║ 6 ║
║ firstname 6 ║ 25 ║ 6 ║ 7 ║
║ firstname 7 ║ 26 ║ 7 ║ 8 ║
║ firstname 8 ║ 27 ║ 8 ║ 9 ║
║ firstname 9 ║ 28 ║ 9 ║ 10 ║
║ firstname 10 ║ 29 ║ 10 ║ 11 ║
╚══════════════╩═════╩════╩═════╝
我希望在1林内完成这项工作。(如果完全不可能,2条语句(
到目前为止,我已经完成了我的发言。
var resultQuery = from a in dtbl1.AsEnumerable()
join b in dtbl2.AsEnumerable()
on a.Field<int>("ID") equals b.Field<int>("LinkID")
select new
{
ID = a["ID"],
Name = a["Name"],
Age = a["Age"],
Qty = b["Quantity"]
}
;
该报表将合并两张表,但我不知道如何继续计算数量。
知道吗?
如果我必须使用第二个查询,它已经完成了。
var secondResultQuery = from row in resultQuery
group row by new { row.ID, row.Name, row.Age } into g
select new
{
g.Key.ID,
g.Key.Name,
g.Key.Age,
totalCount = g.Sum(count => (int)count.Qty)
};
var resultSet = from a in dtbl1.AsEnumerable()
join b in dtbl2.AsEnumerable()
on a.ID equals b.LinkID
group a by new
{
a.Name,
a.Age,
a.ID
} into g
select new
{
g.Key.Name,
g.Key.Age,
g.Key.ID,
g.Count()
};
查询以使用DataTable
var resultSetTicketNo = from a in dtbl1.AsEnumerable()
join b in dtbl2.AsEnumerable()
on a.Field<int>("ID") equals b.Field<int>("LinkID")
group a by new
{
Age = a["Age"],
ID = a["ID"],
Name = a["Name"]
} into g
select new
{
g.Key.Name,
g.Key.Age,
g.Key.ID,
Counter=g.Count()
};
foreach (var a in resultSetTicketNo)
{
Response.Write(a.ID + "~" + a.Name + "~" + a.Age + "~" + a.Counter + "<br/>");
}
Response.Write("<br/><br/>end of resultSetTicketNo<br/><br/>");