如何在我的情况下找到包含匹配字符串的行数据表
本文关键字:字符串 数据表 包含匹 我的 情况下 | 更新日期: 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';");