1

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

public class Results
{
  List<Node> nodes = new List<Node>();

}
public class Node
{
  public int id {get;set;}
  public DateTime initiationDateTime {get;set;}
}

下一步是遍历每个列表项,如果时间戳与之前的最小日期/时间相差超过 30 分钟,那么它将被存储为用户选择。例如,从以下记录集中,用户将以复选框的形式查看以下选项。我想弄清楚的是如何形成用户选择列表。一旦我向用户显示用户选择列表,他们将重新发布带有他们选择的页面,并根据日期范围,我将处理所选日期范围内的记录。

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;
            }

        }
4

1 回答 1

0

我会这样做:

  • 创建一个集合,例如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...
于 2012-12-10T21:53:07.220 回答