使用linq在c#中过滤数据库的日期列

时间:2017-08-23 17:54:18

标签: c# linq datagridview

我有一个包含3列,ID,姓名和生日的表

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

现在我要在Person中显示DataGridView他们的Birthday低于1994/05/20 我使用LINQ创建查询

4 个答案:

答案 0 :(得分:2)

假设您的 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

如果是string类型,则需要转换为Date格式并按上述方式进行比较

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

答案 1 :(得分:1)

假设生日总是处于YYYY / MM / DD格式,那么:

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

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

如果您使用的LINQ提供程序不使用&lt;来支持字符串比较,那么您可以这样做:

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

答案 2 :(得分:1)

此处发布的大多数答案都假设生日为DateTime列。

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

试试这个:

DateTime dt = new DateTime("1994/20/05");

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

答案 3 :(得分:1)

当您使用日期时请帮自己一个忙,并使用strongly typed字段, 它会为你节省很多头疼的事情。在将来。

在示例中,您可以看到声明了一个新的强类型DataColumn字段,并且所有包含日期​​的字符串都转换为&#34; real&#34;日期。然后使用LINQ将结果安全地过滤到新的数据结构(在我选择export class DemoSource<TItem extends IItemData> { ... this.filteredData = this.service.data.value.slice() .map((item: TItem) => { // item doesn't have 'filterProperty' return new Item(item); }) .filter((item: Item) => { // item has 'filterProperty' const searchStr = item.filterProperty().toLowerCase(); return searchStr.indexOf(this.filter.toLowerCase()) !== -1; }); ... 的示例中)。

DataTable