Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用linq组合两个数据表并从第二个表中获取金额_C#_.net_Linq - Fatal编程技术网

C# 使用linq组合两个数据表并从第二个表中获取金额

C# 使用linq组合两个数据表并从第二个表中获取金额,c#,.net,linq,C#,.net,Linq,我有两张表,如下所示 表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

我有两张表,如下所示

表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个linq声明内完成此操作。(如果完全不可能,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 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/>");
var resultsetitcketno=来自dtbl1.AsEnumerable()中的a
在dtbl2.AsEnumerable()中加入b
a.Field(“ID”)等于b.Field(“LinkID”)
a组由纽约
{
年龄=a[“年龄”],
ID=a[“ID”],
Name=a[“Name”]
}进入g
选择新的
{
g、 键。名称,
g、 关键,年龄,,
g、 Key.ID,
计数器=g.计数()
};
foreach(ResultSetSettings中的var a)
{
回答.写(a.ID+“~”+a.Name+“~”+a.Age+“~”+a.Counter+“
”); } 响应。写入(“

结果结束TTICKETNO

”);
谢谢。你真的帮了我。不过有些语法差异。我将使用可以编译的语法编辑post查询。
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()
                        };
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/>");