【问题标题】:Get records for yesterday from list c#从列表 c# 中获取昨天的记录
【发布时间】:2017-01-14 18:13:25
【问题描述】:

我设置了一个包含 7 列和数千行的列表。 我也有一个包含相同数据的数据表(是的,多余的)。 我要做的是获取与昨天日期相关的所有记录。

我已经开始对数据表进行一些查询,但没有成功。它一直空着。与列表相同。

下面是表格/列表的所有代码。

     DataTable dtTesting = new DataTable();
            List<string>[] listA = new List<string> [8];
            listA[0] = new List<string>();
            listA[1] = new List<string>();
            listA[2] = new List<string>();
            listA[3] = new List<string>();
            listA[4] = new List<string>();
            listA[5] = new List<string>();
            listA[6] = new List<string>();
            listA[7] = new List<string>();

            dtTesting.Columns.Add("Over2Minutes", typeof(string));
            dtTesting.Columns.Add("AgentName", typeof(string));
            dtTesting.Columns.Add("PhoneNumber", typeof(string));
            dtTesting.Columns.Add("DateTime", typeof(DateTime ));
            dtTesting.Columns.Add("Direction", typeof(string));
            dtTesting.Columns.Add("CallTo", typeof(string));
            dtTesting.Columns.Add("ManagerName", typeof(string));
            dtTesting.Columns.Add("Duration", typeof(string));

            // List<string> listE = new List<string>();
            //List<string> listF = new List<string>();

            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();
                var values = line.Split(',');

                DataRow data = dtTesting.NewRow();
                data["Over2Minutes"] = values[0];
                data["AgentName"] = values[1];
                data["PhoneNumber"] = values[2];
                data["DateTime"] = values[3];
                data["Direction"] = values[4];
                data["CallTo"] = values[5];
                data["ManagerName"] = values[6];
                data["Duration"] = values[7];

                listA[0].Add(values[0]);
                listA[1].Add(values[1]);
                listA[2].Add(values[2]);
                listA[3].Add(values[3]);
                listA[4].Add(values[4]);
                listA[5].Add(values[5]);
                listA[6].Add(values[6]);
                listA[7].Add(values[7]);


            } 
            //start of filters

            DataTable filtered = new DataTable();
            DateTime yesterday = DateTime.Today.AddDays(-1);
            DateTime today = DateTime.Today.AddDays(1);

            //List<string> listBD = new List<string>();
           // listBD.AddRange(listB);
         //   listBD.AddRange(listD);
           // 


            if (cbDayList.SelectedIndex == 0)
            {
                try
                {
                  var FilteredData =   

                }
                catch
                {
                    MessageBox.Show("No Data To Show");
                }
            }

【问题讨论】:

  • 您的大部分代码都不相关。只需描述表的结构,而不是粘贴构建和填充它的代码。
  • 请提供最少、可验证、可运行的代码。
  • 另外,您能提供您使用过的任何过滤代码吗?目前,我们没有任何信息您尝试了哪些查询。
  • 你在哪里过滤数据?在列表上还是在数据表上?这很重要,因为您有一个 List&lt;string&gt; 用于作为 DateTime 的数据表列,并且对第一个列的过滤非常依赖于您如何格式化日期字符串。与现在一样,日期是使用您的日期时间本地化存储的
  • 哇,我收到的回复比预期的要快。对于最少的描述,我深表歉意。上面的显示是为了表明我有一个活动表和可以从中提取的列表。我试图过滤的代码: dtTesting.Select("DateTime >= #" +昨天 + "# AND date

标签: c# list datetime filter datatable


【解决方案1】:

如果要根据特定数据过滤 DataTable 行,请使用 DataTable 的 Select 方法。但是,由于 Select 方法的 FilterExpression 是字符串,因此您必须将 DateTime 变量转换为字符串。这就是问题的开始。

您不能使用 DateTime 到字符串的默认转换,因为在 DateTime 的情况下,FilterExpression 需要根据 InvariantCulture 格式表示日期。 "M/d/yyyy"

 var FilteredData = dtSettings.Select("DateTime >= #" + 
                                      yesterday.ToString("M/d/yyyy") + 
                                      "# AND date <= #" + 
                                      today.ToString("M/d/yyyy") + "#"); 

顺便说一句,虽然这个查询不太可能获取恰好在午夜存储的记录。可能你需要&lt; today.ToString("M/d/yyyy")

实现目标的另一种方法是通过 IEnumerable 扩展 Where(Linq 命名空间)

 var  FilteredData = dtSettings.AsEnumerable()
              .Where(x => x.Field<DateTime>("DateTime") >= yesterday &&
                          x.Field<DateTime>("DateTime") < today);

【讨论】:

    猜你喜欢
    • 2012-06-04
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    相关资源
    最近更新 更多