使用 linq 在 c# 中筛选数据库的日期列



我有一个包含 3 列、Id、姓名和生日
的表格

Id | Name | Birthday
-- | ---- | -----------
1  | John | 1993/07/12
2  | Sarah| 1995/02/05
3  | Jack | 1990/10/01

现在我将向DataGridViewPerson展示他们的Birthday低于 1994/05/20
我使用 LINQ 创建查询

假设您的Birthday列的类型为Date

DateTime dt=DateTime.ParseExact("1994/05/20", "yyyy/MM/dd", CultureInfo.InvariantCulture);
var result =   from t in context.table
where t.Birthday < dt
select t;

EDIT

如果是字符串类型,则需要转换为日期格式并按上述方式进行比较

var result =   from t in context.table
where   DateTime.Parse(t.Birthday,"yyyy/MM/dd",CultureInfo.InvariantCulture) < dt
select t;

假设生日始终采用 YYYY/MM/DD 格式,则:

Persons.Where(p=>p.Birthday<"1994/05/20");

但这只有效,因为 YYYY/MM/DD 中的日期是可排序的,因此您不需要将它们解析为真正的日期/日期时间对象并将它们作为字符串进行比较实际上仍然有效。

如果您使用的 LINQ 提供程序不支持使用 <进行字符串比较,则可以改为执行以下操作:>

Persons.Where(p=>p.Birthday.CompareTo("1994/05/20") < 0);

此处发布的大多数答案都假定生日为日期时间列。

首先,我们必须将文本解析为 DateTime,然后进行比较,如下所示

试试这个:

DateTime dt = new DateTime("1994/20/05");
var result = EmployeeDetails.Where(a => DateTime.ParseExact(a.Birthday ,"yyyy/dd/mm",CultureInfo.InvariantCulture) < dt ).ToList();

当您使用日期时,请帮自己一个忙并使用强类型字段, 将来会为您省去很多"头痛"。

在示例中,您可以看到声明了一个新的强类型DataColumn字段,并且包含日期的所有字符串都转换为"实际"日期。 然后使用 LINQ 将结果安全地筛选为新的数据结构(在示例中,我选择DataTable(。

private void Funky()
{
DataColumn RealDate = new DataColumn("RealDate");
RealDate.DataType = System.Type.GetType("System.DateTime");
dt.Columns.Add(RealDate);
// strongly type a DateTime Column it will save you alot of problems in the future
for (int i = 0; i < dt.Rows.Count; i++)
{
string[] temp = dt.Rows[i]["BirthDay"].ToString().Split('/');
dt.Rows[i]["RealDate"] = new DateTime(int.Parse(temp[0]), int.Parse(temp[1]), int.Parse(temp[2]));
}
// finaly get you result
var targetDate = new DateTime(20, 5, 1994);
DataTable FilterDt = dt.AsEnumerable().Where(x => x.Field<DateTime>("RealDate") < targetDate).Select(y => y).CopyToDataTable();
dataGridView1.DataSource = FilterDt;
}

最新更新