2017-04-18 75 views
2

我有一個呼叫中心應用程序,它將一堆其他數據中的呼叫顯示給我們的分析師和經理。我正在嘗試顯示隊列中接下來的三個人接聽電話。我能夠將下面的代碼放在一起,並將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

回答

1

使用.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

1

可以使用Select從LINQ的

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