自定义对列表进行排序



我有一个文本文件,我解析并将解析的结果加载到集合中。我已经完成了解析并将结果加载到集合对象中。

public class Results
{
  List<Node> nodes = new List<Node>();
}
public class Node
{
  public int id {get;set;}
  public DateTime initiationDateTime {get;set;}
}

下一步是循环访问每个列表项,如果时间戳差异与上一个最小日期/时间相差 30 分钟以上,则它将被存储为用户选择。 例如,从以下记录集中,用户将以Checbox的形式查看以下选项。 我试图弄清楚的只是如何形成用户选择列表。一旦我向用户显示用户选择列表,他们将重新发布包含其选择的页面,并根据日期范围处理所选日期范围内的记录。

User Choices:
1/12/2012 10:09 -  1/12/2012 10:49 
1/12/2012 13:25 -  1/12/2012 13:26
1/12/2012 15:30
    Parsed List:
ID    Test Initiation       InitiationChoice    CompletionChoice
1       1/12/2012 10:09           Yes              
2       1/12/2012 10:09
3       1/12/2012 10:09
4       1/12/2012 10:09
5       1/12/2012 10:09
6       1/12/2012 10:09
7       1/12/2012 10:48
8       1/12/2012 10:48
9       1/12/2012 10:49
10      1/12/2012 10:49
11      1/12/2012 10:49
12      1/12/2012 10:49                               Yes
13      1/12/2012 13:25           Yes
14      1/12/2012 13:25
15      1/12/2012 13:25
16      1/12/2012 13:25
17      1/12/2012 13:26
18      1/12/2012 13:26                                 Yes
19      1/12/2012 15:30           Yes

以下是我尝试创建用户选择,希望对此提出建议

        //First Minimum Date to start as i have already sorted this list based on date.
        minimumDateTime = lf.Nodes.ElementAt(0).InitiationDate; 
        foreach (Node rb in lf.Nodes)
        {
            TimeSpan intervalMinutes = rb.InitiationDate.Subtract(minimumDateTime);
            UserConfirmationErrors confirmationRun = new UserConfirmationErrors();
            if (intervalMinutes.TotalMinutes >= 30)
            {
                //New Minimum Date/Time
                minimumDateTime = rb.InitiationDate;
            }
        }

我会这样做:

  • 创建集合,例如List<DateTime> minDates
  • 将新的最小日期推送到集合中
  • 将您的收藏转换为List<SelectListItem>
  • 在回发时,该值将是最小日期(而不是范围)。 您知道,给定一个最小日期,您总能找到范围:只需添加 30 分钟。

因此,我的伪示例如下所示:

    minimumDateTime = DateTime.Min; // don't force to first record.. let loop do it
    var minDates = new List<DateTime>();
    foreach (Node rb in lf.Nodes)
    {
        TimeSpan intervalMinutes = rb.InitiationDate.Subtract(minimumDateTime);
        UserConfirmationErrors confirmationRun = new UserConfirmationErrors();
        if (intervalMinutes.TotalMinutes >= 30)
        {
            //New Minimum Date/Time
            minimumDateTime = rb.InitiationDate;
            minDates.Add(minimumDateTime); // add to new collection
        }
    }
// now loop your minDates to create your select list
var items = new List<SelectListItem>();
foreach(var minDate in minDates)
{
  var item = new SelectListItem() { Value = minDate.ToString(), Text = String.Format("{0} - {1}", minDate, minDate.AddMinutes(30) };
  items.add(items);
}
// now items is your collection that you can bind your select list to...

最新更新