2012-12-10 59 views
1

我有一个文本文件,我解析并将解析结果加载到集合中。我已完成解析并将结果加载到集合对象中。自定义排序列表

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

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

下一步是通过每个列表项进行迭代,并且如果时间戳差值是从先前的最小日期/时间超过30分钟,然后它将被存储为用户选择。例如从以下记录集中,用户将以checboxes的形式查看以下选项。我想弄清楚的是如何形成用户选择列表。一旦我向用户显示用户选择列表,他们将重新发布页面及其选择,并根据日期范围我将在选定的日期范围内处理记录。

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

     } 
+1

可能重复:[列表的自定义排序](http://stackoverflow.com/q/10049466/299327) –

回答

0

我会做到这一点建议:

  • 创建一个集合,如List<DateTime> minDates
  • 将新分钟日期推入收藏集
  • convert your collection在回发时,该值将是最短日期(而不是范围)。你知道给定一个最短日期,你总是可以找到范围:只需加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...