[英]C# Multidimensional Arrays
我對自己的工作有些困惑,似乎使我的問題變得復雜了。
我正在從呼叫撥號程序中提取數據,該撥號程序記錄所有座席的所有呼叫,每個座席都在一個隊列中,同一隊列中可以有多個座席。
我在SQL中的基本計算我可以得出日期,隊列,小時和每小時的呼叫次數,如下所示:
callDate queueid cHour numberOfCalls
2013-05-03 No Queue 0 1
2013-05-03 No Queue 2 1
2013-05-03 No Queue 6 1
2013-05-03 No Queue 7 7
2013-05-03 No Queue 8 6
2013-05-03 No Queue 9 14
2013-05-03 No Queue 10 6
2013-05-03 No Queue 11 5
2013-05-03 No Queue 12 8
2013-05-03 17001 7 114
2013-05-03 17001 8 238
2013-05-03 17001 9 227
2013-05-03 17001 10 190
2013-05-03 17001 11 221
2013-05-03 17001 12 73
2013-05-03 17002 6 3
2013-05-03 17002 7 125
在這里,您可以看到“隊列”,“小時”以及該小時的呼叫次數(小時為上午7點,上午8點...等)。
我需要知道是否創建多維數組來存儲隊列,每個小時的隊列和小時數(如果有意義),以便以后可以將其用作圖表?
這是我遇到的示例代碼:
Xaml:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:DV="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit"
xmlns:DVC="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
xmlns:ThemeManager.ThemeName="MetropolisDark"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DVC:Chart Name="Chart"
Background="#463F3F">
<DVC:Chart.PlotAreaStyle>
<Style TargetType="Grid">
<Setter Property="Background" Value="Transparent" />
</Style>
</DVC:Chart.PlotAreaStyle>
</DVC:Chart>
</Grid>
C#:
private void AllAgentHourData()
{
string[] queueid = new string[100];
int[] callHour = new int[100];
int count = 0;
int counter = 0;
SqlConnection sqlConnection1 = new SqlConnection("Server=nl-reportserver;Database=RC_Dailer_WH;User Id=sa;Password=d@t0r@.001");
SqlCommand cmd = new SqlCommand();
SqlDataReader reader;
//cmd.CommandText = "SELECT * FROM RC_call_logs WHERE convert(date,call_logdate,120) = convert(date,GETDATE(),120)";
cmd.CommandText = "Select distinct queueid from RC_call_logs order by queueid";
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
queueid[count] = reader.GetString(0);
}
}
else
{
MessageBox.Show("No Error message");
}
reader.Close();
sqlConnection1.Close();
Random random = new Random();
//Chart is your chart object in Xaml
//declare your series
for (int i = 1; i < 10; i++)
{
LineSeries ls = new LineSeries();
ls.Title = i.ToString();
ls.IndependentValueBinding = new Binding("Key");
ls.DependentValueBinding = new Binding("Value");
ls.ItemsSource = new KeyValuePair<DateTime, int>[]{
new KeyValuePair<DateTime,int>(DateTime.Now , random.Next(1000)),
new KeyValuePair<DateTime,int>(DateTime.Now.AddMonths(1), random.Next(10, 1000)),
new KeyValuePair<DateTime,int>(DateTime.Now.AddMonths(2), random.Next(10, 1000)),
new KeyValuePair<DateTime,int>(DateTime.Now.AddMonths(3), random.Next(10, 1000)),
new KeyValuePair<DateTime,int>(DateTime.Now.AddMonths(4), random.Next(10, 1000))};
// then add it to the chart
Chart.Series.Add(ls);
}
}
我不確定您要達到的目標,但是這樣可能會有所幫助。
Dictionary<DateTime, Dictionary<string, KeyValuePair<int,int>>> dicData
DateTime是您的DateTime,字符串是您的Queue和int,KeyValuePair中的int是hour和numberOfCall對。
編輯1:
實際上,它必須是KeyValuePair的列表。 這是一個示例:
Dictionary<DateTime, Dictionary<string, List<KeyValuePair<int, int>>>> dicData = new Dictionary<DateTime, Dictionary<string, List<KeyValuePair<int, int>>>>();
//dt is your result from SQL query
foreach (DataRow dr in dt.Rows)
{
DateTime dtm = DateTime.Parse(dr["DateTime"].ToString());
string queue = dr["Queue"].ToString();
int hours = int.Parse(dr["Hours"].ToString());
int cycles = int.Parse(dr["Cycles"].ToString());
//Adding Distinct DateTime objects as Key
if(!dicData.ContainsKey(dtm))
{
dicData[dtm] = new Dictionary<string, KeyValuePair<int, int>>();
}
//Adding distinct Queue object as Key under the DateTime dictionary
if (!dicData.ContainsKey(queue))
{
dicData[dtm][queue] = new List<KeyValuePair<int, int>>();
}
dicData[dtm][queue].Add(new KeyValuePair<int, int>(hours, cycles));
}
編輯
因此,在閱讀while循環時,您可以做到,
while (reader.Read())
{
var callHour = new CallHour(
DateTime.ParseExact("yyyy-mm-dd", reader.GetString(0)),
reader.GetInt32(2),
reader.GetInt32(3),
reader.IsDBNull(1) ? null : reader.GetInt32(1));
callHours.Add(callHour.Time, callHour);
}
制作一個類,您可以將其CallHour
然后可以具有一些CallHour
通用集合。 該通用集合將支持IEnumerable<CallHour>
並可能支持IList<CallHour>
。
public class CallHour
{
private readonly DateTime time;
public CallHour(
DateTime day,
int hour,
int callCount,
int? queueId = null)
{
this.hour = new DateTime(
day.Year,
day.Month,
day.Day,
hour,
0,
0,
0);
this.CallCount = callCount;
this.QueueId = queueId;
}
public DateTime Time
{
get
{
return this.time;
}
}
public int? QueueId { get; set; }
public int CallCount { get; set; }
}
然后,您可以聲明一個排序列表,然后添加第一個小時。
var callHours = new SortedList<DateTime, CallHour>();
var someCallHour = new CallHour(
DateTime.Parse("2013-05-03 00:00:00"), 0, 1);
callHours.Add(someCallHour.Time, someCallHour);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.