如何在我的情况下找到包含匹配字符串的行数据表

本文关键字:字符串 数据表 包含匹 我的 情况下 | 更新日期: 2023-09-27 18:05:14

我有一个包含年份的组合框,例如:2016,2017,2018等。

我有dt,它有5列,其中包含3列的日期,按名称paydate,begindate, enddate。但是每个日期的格式是dd/mm/yyyy。

我要做什么?

我必须在组合框(cboYear)中找到包含所选年份的所有行。如果datatable的行中只有年份,可能会简单得多但它有日期和月份,后面有"/"因此,它无法将字符串"2016"与"01-12-2016"匹配,并且通过以下查询不返回任何行:

//this cboYear.Text has lets say "2016 and paydate and other two column has date in format "dd/mm/yyyy""
 DataRow[] foundAuthors = dt2.Select("paydate= '" + cboYear.Text + "'" + " and " + "begindate= '" + cboYear.Text + "'" + " and " + "enddate= '" + cboYear.Text + "'");
 if (foundAuthors.Length != sdgvPayDates.Rows.Count-1)
 {
       MessageBox.Show("All rows must have same year as the selected year in combobox");
       return false;
 }

如何通过寻找有效匹配获得包含所选年份的行?

如果LINQ中也存在类似"like"操作符的东西?这样它就能找到所有匹配的行,这样它就能找到行,即使"2016"的数据表包含01/02/2016格式。数据表包含http://prntscr.com/ccx3zn

如何在我的情况下找到包含匹配字符串的行数据表

string stringDate= "01-12-2016";
DateTime date = DateTime.Parse(stringDate);
int year = date.Year;

您可以将日期解析为DateTime并提取年份

编辑:您可以尝试下面代码片段中提到的方法,其中我使用LINQ从数据表中获取所需的数据行。

 DataTable dt = new DataTable();
 dt.Columns.Add("dateColumn");
 DataRow row = dt.NewRow();
 row[0] = "01-12-2016";
 dt.Rows.Add(row);
 int year = 2016;            
 DataRow[] foundAuthors = dt.AsEnumerable().Where(r => DateTime.Parse(r.Field<string>("dateColumn")).Year == year).ToArray();

在select语句中,您希望选择全年。因此,请选择当年1月1日之后和次年1月1日之前的日期。

int nextyear = Int32.Parse(cbo.Year) + 1;
DataRow[] foundAuthors = dt2.Select("paydate>='" + cboYear.Text + "-01-01' and paydate<"+ nextyear + "-01-01 ' and begindate>='" + cboYear.Text + "-01-01' and begindate<" + nextyear + "-01-01' and enddate>= '" + cboYear.Text + "-01-01' and enddate<" + nextyear + "-01-01';");