[英]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.