繁体   English   中英

如何从具有日期范围的表中获取日期的值?

[英]How to get a value from a date from a table with date range?

我有一个包含一系列日期值的表格。 如果我输入一个日期,那么它应该在表格中的日期范围内查看该日期并给我一个值。 我在 C# 工作。

DateFrm   |DateTo    |ivalue
----------|----------|-----
2019-01-01|2019-02-01|10
2019-02-02|2019-03-01|11
2019-03-02|2019-04-01|12

如果我输入一个日期,例如 2019-02-09,那么它应该返回值 11。请帮助我在 C# 中找到我的值。 谢谢你。

我正在尝试类似的东西..但从来没有把它整理好。

if(obj.mytable.rows.count>0) {foreach } ...

假设dt是您的 DataTable:

string example = "2019-02-09";
DataRow[] results = dt.Select($"DateFrm <= #{example}# AND DateTo >=#{example}#");
Console.WriteLine(results[0]["ivalue"]);

Output:

11

为行运行循环以检查下面指定的条件

  for (int i1 = 0; i1 < table.Rows.Count; i1++)
            {
                DataRow row = table.Rows[i1];
                var datefrm = DateTime.Parse(row["DateFrm"].ToString());
                var dateto = DateTime.Parse(row["DateTo"].ToString());
                if (inputDate >= datefrm && inputDate <= dateto)
                {
                    return row["ivalue"];
                }
            }

使用 LINQ 非常简单。

void Main()
{
    var lst= new List<DateRange>();
    var dr = new DateRange(new DateTime(2019, 1, 1),new DateTime(2019, 2, 1),10);
    lst.Add(dr);
    dr = new DateRange(new DateTime(2019, 2, 2), new DateTime(2019, 3, 1), 11);
    lst.Add(dr);
    dr = new DateRange(new DateTime(2019, 3, 2), new DateTime(2019, 4, 1), 12);
    lst.Add(dr);

    var searchFor = new DateTime(2019, 2, 9);

    var res = (from x in lst
              where x.DateFrm <= searchFor
                 && searchFor <= x.DateTo
             select x.IValue).Single();
    Console.WriteLine($"result:{res}");
}

public class DateRange
{
    public DateTime DateFrm { get; set; }
    public DateTime DateTo  { get; set; }
    public int      IValue  { get; set; }
    public DateRange(DateTime dateFrm, DateTime dateTo, int iValue)
    {
        DateFrm = dateFrm;
        DateTo  = dateTo;
        IValue  = iValue;
    }
}

您可以使用扩展方法AsEnumerable使用 LINQ 查询您的DataTable 要使用此方法,需要引用System.Data.DataSetExtensions程序集。

CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
var dt = new DataTable();
dt.Columns.Add("DateFrm", typeof(DateTime));
dt.Columns.Add("DateTo", typeof(DateTime));
dt.Columns.Add("ivalue", typeof(int));
dt.Rows.Add("2019-01-01", "2019-02-01", 10);
dt.Rows.Add("2019-02-01", "2019-03-01", 11);
dt.Rows.Add("2019-03-01", "2019-04-01", 12);

var searchFor = new DateTime(2019, 2, 9);

DataRow[] results = dt.AsEnumerable().Where(row =>
    searchFor >= row.Field<DateTime>("DateFrm") &&
    searchFor < row.Field<DateTime>("DateTo")).ToArray();

foreach (var result in results)
    Console.WriteLine(String.Join(", ", result.ItemArray));

Output:

02/02/2019 00:00:00, 03/01/2019 00:00:00, 11

很抱歉,我无法让我的问题变得更容易,可能我没有提到我正在使用 LINQ。

从这里获得帮助后,我创建了一个程序。

where DateFrm<=mysearchdate and DateTo<=mysearchdate

在流程的后面,我在代码中调用了它

var vl = (from s in obj.st_getiValueSearch(mysearchdate.Value) select s.ivalue).Single();

再次感谢您的及时帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM