需要帮助从列表中拉出某些数据

问题描述:

我有一个呼叫中心应用程序,它将一堆其他数据中的呼叫显示给我们的分析师和经理。我正在尝试显示队列中接下来的三个人接听电话。我能够将下面的代码放在一起,并将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(); 

enter image description here

使用.Select()方法投射新型从您的查询。

nextInLine.itemsource = max3?.Select(x => x?.AgentName).FirstOrDefault() ?? string.Empty; 

它会第一时间代理max3和检索只有字符串AgentName,将其分配给itemsource

这种情况下的?是空传播算子。如果max3为空,则在评估.Select()之前它将返回空值,它与空合并运算符(??)一起将itemsource设置为空字符串。如果您的max3列表中的任何项目为空,或者如果AgentName本身为空,它会重复此过程。

+0

所以这工作。任何你可以帮助补偿空值的机会。当我使用选择选项有时会抛出错误,并说对象引用未设置为对象的实例。这就是为什么我没有这样做的开始。 – firehotguitar88

+0

@ firehotguitar88 absolutley,请参阅我的更新。 –

+0

因此,修复了空引用错误,现在它没有收到错误,我注意到它正在垂直显示代理名称每个单元格的一个字母。不要以为你有一个简单的解决方案。当我使用文本框而不是列表框时,它正确显示名称,但只显示一个名称。 – firehotguitar88

可以使用Select从LINQ的

var agentNamesFromMax3 = max3.Select(m => m.AgentName);