搜索日期列表

时间:2013-01-02 21:24:04

标签: c# linq

我有一个包含以下字段的集合列表

  1. Date1
  2. Xvalue
  3. y值
  4. 我想在此列表中针对其他日期列表查找。对于第二个列表中的每个日期,我想要获得从该最小日期到下一个日期之间的记录(距离最短日期30分钟)。

    foreach (var item in selectedDates.Where(x => x.Checked))
    {
         // item.minDate is my starting date
         // I want all records between item.minDate and 30 minutes added to it)               
         var t = lf.ReplicateBlocks.FindAll(o=> o.minimumCompletionDate >= item.
    }
    
    **UPDATE**
    
      public class ReplicateBlock
        {
            public int ReplicateId { get; set; }
            public string AssayNumber { get; set; }
            public DateTime InitiationDate { get; set; }
            public DateTime InitiationTime { get; set; }
            public DateTime minimumCompletionDate { get; set; }
            public DateTime minimumCompletionTime { get; set; }
            public string correctedCount { get; set; }
            public string moduleName { get; set; }
            public string exception { get; set; }
        }
    
    
    public class RunLogEntryDatesDisplay
    {
        public DateTime runDate { get; set; }
        public String DateRange { get; set; }
        public bool Checked { get; set; }
        public string MinimumReplicateId { get; set; }
    }
    

    我正在寻找的最终输出是修订后的Replicate Block列表。 RunLogEntryDatesDisplay是从视图发布的复选框列表。在这个列表中,我查看了检查日期 runDate ,并从第一个选择开始,我添加了30分钟,然后查找 ReplicateBlock List 中的所有记录和边缘。我将对checbox列表中的每个选定日期执行相同操作,最后将根据用户选择(已选中项目)生成最终/已过滤的ReplicateBlockLisr。

1 个答案:

答案 0 :(得分:2)

您可以遍历日期并填充结果列表:

List<ReplicateBlock> blocks = new List<ReplicateBlock>();    
foreach (var item in selectedDates.Where(x => x.Checked))
{
     var t = lf.ReplicateBlocks.Where(o=> 
                 o.minimumCompletionDate >= item.minDate  &&
                 o.minimumCompletionDate <= item.minDate.AddMinutes(30));

     blocks.AddRange(t);
}

您也可以在一个查询中执行此操作:

var query = from d in selectedDates
            from o in lf.ReplicateBlocks
            where d.Checked &&
                  o.minimumCompletionDate >= d.minDate  &&
                  o.minimumCompletionDate <= d.minDate.AddMinutes(30))
            select o;