我有一个呼叫中心应用程序,它将一系列其他数据中的呼叫显示给我们的分析师和经理。我试图在队列中显示接下来的三个人来接听电话。我能够将下面的代码放在一起,并将max3作为项目源引用到列表框中,但它实际上并没有显示下一个人的姓名。当你在max3上添加一个断点时,它会显示下一个三个代理,但它也会显示所有数据,队列中的时间,分机号码等等。我需要知道如何只显示他们的名字。
List<NewAgent> newAgentList = new List<NewAgent>();
List<Tuple<String, TimeSpan>> availInItems = new List<Tuple<string, TimeSpan>>();
foreach (var item in e.CmsData.Agents)
{
NewAgent newAgents = new NewAgent();
newAgents.AgentName = item.AgName;
newAgents.AgentExtension = item.Extension;
newAgents.AgentDateTimeChange = ConvertedDateTimeUpdated;
newAgents.AuxReasons = item.AuxReasonDescription;
newAgents.LoginIdentifier = item.LoginId;
newAgents.AgentState = item.WorkModeDirectionDescription;
var timeSpanSince = DateTime.Now - item.DateTimeUpdated;
newAgents.AgentDateTimeStateChange = timeSpanSince;
newAgentList.Add(newAgents);
if (item.WorkModeDirectionDescription == "AVAIL-IN")
{
availInItems.Add(Tuple.Create(newAgents.AgentName, timeSpanSince));
}
availInItems.Sort((t1, t2) => t1.Item2.CompareTo(t2.Item2));
}
在上面的代码之后发生:
var availInAgents = newAgentList
.Where(ag => ag.AgentState == "AVAILIN") .ToList();
availInAgents.Sort((t1, t2) =>
t1.AgentDateTimeStateChange.CompareTo(t2.AgentDateTimeStateChange));
var minTimeSpanAgent = availInAgents.FirstOrDefault();
var maxTimeSpanAgent = availInAgents.LastOrDefault();
var min3 = availInAgents.Take(3).ToList();
var max3 = availInAgents.Skip(availInAgents.Count - 3);
max3.Reverse();
这是我的问题所在,它会在下面的屏幕截图中显示信息。我只需要AgentName,我不知道如何只访问这条信息。请协助。
nextInLine.itemsource = max3.ToString();
答案 0 :(得分:1)
您可以使用Linq的Select
var agentNamesFromMax3 = max3.Select(m => m.AgentName);
答案 1 :(得分:1)
使用.Select()方法从查询中投射新类型。
nextInLine.itemsource = max3?.Select(x => x?.AgentName).FirstOrDefault() ?? string.Empty;
它将使用max3
中的第一个代理并仅检索字符串AgentName
,并将其分配给itemsource
。
在这种情况下,?
是空传播运算符。如果max3
为null,则在评估.Select()
之前它将返回null,它与Null Coalescing运算符(??)一起将itemsource
设置为空字符串。如果max3列表中的任何项为null,或者AgentName本身为null,则重复此过程。