c# - Need to figure out how to pull a name along with the timespan out of a list -


i've list pulls timespans , selects , displays largest timespan in list. need figure out way display name matches timespan. not sure start this. able me started. of code i've below.

code: can see create list of timespans item workmodedirectiondescription = avail-in. need agname = avail-in = , match agent has max time listoftimespans.max , display name of agent has max time. hope makes sense. biggest issue i'm having can create separate list of agname don't know how match times of agent display name has largest time. can't add agname list listoftimespans because agname of type string not timespan.

  var listoftimespans = new list<timespan>();        list<newagent> newagentlist = new list<newagent>();                         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")          {              listoftimespans.add(timespansince);          }          var comparetimeandname = new tuple<string, timespan>(item.agname, listoftimespans.max());           max = comparetimeandname.item2;          maxname = comparetimeandname.item1.       } 

update: occurs right after above code

  var availinagents = newagentlist.where(ag => ag.agentstate == "avail-in").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.reverse<newagent>().take(3).tolist();  nextinline.text = string.join(environment.newline, min3); 

edit: screenshot enter image description here

so let's say, discussed in comments, collect list of tuples representing names , timespans. way, wouldn't in loop; i'd after loop:

var availinitems =      newagentlist         .where(ag => ag.workmodedirectiondescription == "avail-in")         .select(ag =>              new tuple<string, timespan>(ag.agentname, ag.agentdatetimestatechange))         .tolist(); 

to min , max timespan items, sort list timespan values of each item, , grab first , last items. i'm using firstordefault() , lastordefault() instead of first() , last() because return null on empty list rather throwing exception. way, more gracefully handle case list happens empty.

list<tuple<string, timespan>> availinitems = new list<tuple<string, timespan>>();  //  ... populate availinitems in loop ...  availinitems.sort((t1, t2) => t1.item2.compareto(t2.item2));  var mintimespantuple = availinitems.firstordefault(); var maxtimespantuple = availinitems.lastordefault(); 

lowest three, highest three:

var min3 = availinitems.take(3).tolist(); //  there's overload of reverse, without type argument,  //  meber of list<t>; reorders list in place , returns void.  //  need one. var max3 = availinitems.reverse<tuple<string, timespan>>().take(3).tolist(); 

those ok if have fewer 3 items in list. you'll whatever has.

however

both pieces of information we're putting in tuple in newagent. why tuple involved? no need. i'd this:

var availinagents =      newagentlist         .where(ag => ag.workmodedirectiondescription == "avail-in")         .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).tolist();  max3.reverse(); 

Comments

Popular posts from this blog

php - Permission denied. Laravel linux server -

google bigquery - Delta between query execution time and Java query call to finish -

python - Pandas two dataframes multiplication? -