需要帮助从列表中拉出某些数据
问题描述:
我有一个呼叫中心应用程序,它将一堆其他数据中的呼叫显示给我们的分析师和经理。我正在尝试显示队列中接下来的三个人接听电话。我能够将下面的代码放在一起,并将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();
答
使用.Select()方法投射新型从您的查询。
nextInLine.itemsource = max3?.Select(x => x?.AgentName).FirstOrDefault() ?? string.Empty;
它会第一时间代理max3
和检索只有字符串AgentName
,将其分配给itemsource
。
这种情况下的?
是空传播算子。如果max3
为空,则在评估.Select()
之前它将返回空值,它与空合并运算符(??)一起将itemsource
设置为空字符串。如果您的max3列表中的任何项目为空,或者如果AgentName本身为空,它会重复此过程。
答
可以使用Select
从LINQ的
var agentNamesFromMax3 = max3.Select(m => m.AgentName);
所以这工作。任何你可以帮助补偿空值的机会。当我使用选择选项有时会抛出错误,并说对象引用未设置为对象的实例。这就是为什么我没有这样做的开始。 – firehotguitar88
@ firehotguitar88 absolutley,请参阅我的更新。 –
因此,修复了空引用错误,现在它没有收到错误,我注意到它正在垂直显示代理名称每个单元格的一个字母。不要以为你有一个简单的解决方案。当我使用文本框而不是列表框时,它正确显示名称,但只显示一个名称。 – firehotguitar88