我在 SQL 中有两个表,我将它们填充到 C# 中的 DataTables 中。它们的 SQL 表位于不同的服务器和不同的数据库上。
在第一个表中,我有 5 列
Name(string), AgentStatus(string), TimeInState(double), TaskHandled(double), Region(string)
第二张表我有 3 列
Name(string), CChats(double), AChats(double)
我一直在使用这个链接来合并 C# 中的表
但是我遇到的问题是这个。
表 1 有 59 行,每个用户 1 行。
表 2 有 25 行,每个拥有 Chat 帐户的用户 2 行。
当我在 C# 中合并它们时,我只从表 1 中获得与表 2 中的 25 行匹配的匹配项。我需要显示表 1 中的所有行,如果它们在表 2 中有一行,则显示该数据,否则显示 0
我知道问题出在哪里,它在上面链接中的 select 语句中,但我不确定如何在 C# 中修复它
这是我的代码不起作用......列表框只是为了查看输出以进行调试......
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
dt1.Columns.Add("Name", typeof(string));
dt1.Columns.Add("Status", typeof(string));
dt1.Columns.Add("Time", typeof(double));
dt1.Columns.Add("Calls", typeof(double));
dt1.Columns.Add("Region", typeof(string));
dt2.Columns.Add("Name", typeof(string));
dt2.Columns.Add("CChats", typeof(double));
dt2.Columns.Add("AChats", typeof(double));
foreach(DataRow dr in _agentStates.Rows)
{
DataRow row = dt1.NewRow();
row["Name"] = dr[0].ToString();
row["Status"] = dr[1].ToString();
row["Time"] = Convert.ToDouble(dr[2].ToString());
row["Calls"] = Convert.ToDouble(dr[3].ToString());
row["Region"] = dr[4].ToString();
dt1.Rows.Add(row);
}
foreach(DataRow dr in _chatCount.Rows)
{
DataRow row = dt2.NewRow();
row["Name"] = dr[0].ToString();
row["CChats"] = Convert.ToDouble(dr[1].ToString());
row["AChats"] = Convert.ToDouble(dr[2].ToString());
dt2.Rows.Add(row);
}
var result = from table1 in dt1.AsEnumerable()
join table2 in dt2.AsEnumerable() on (string)table1["Name"] equals (string)table2["Name"]
select new
{
Name = (string)table2["Name"],
Status = (string)table1["Status"],
Time = (double)table1["Time"],
Calls = (double)table1["Calls"],
Region = (string)table1["Region"],
CChats = (double)table2["CChats"]
};
foreach (var item in result)
{
listBox1.Items.Add(item.Name + " " + item.CChats.ToString());
}