【问题标题】:VB.NET Dataview Rowfilter by TimeVB.NET Dataview Rowfilter 按时间
【发布时间】:2017-03-13 12:50:29
【问题描述】:

我想扩展我的dataview 过滤。有些表包含datetime 列。

搜索指定日期已经实现了,但是怎么可能搜索像 10:20 这样的时间模式呢?

我目前的陈述如下,这似乎有道理,但不起作用:

"columnname >= '10:20:00' AND columnname <= '10:20:59'"

是否有类似time() 的函数,例如" time(columnname) >= '10:20...

也许是另一种逃避不相关日期部分的方法,例如:>= '% 10:20...

找不到与此问题相关的任何内容?我真的是第一个想要这种功能的人吗?

【问题讨论】:

    标签: vb.net time dataview rowfilter


    【解决方案1】:

    您可以通过将 System.Data.DataSetExtensions-reference 添加到您的项目并执行以下操作来使用 Linq(导入 System.Linq):

    Dim rows As DataRow() = (From row In myDatatable.AsEnumerable
                                    Where row.Field(Of DateTime)("column").Hour > 10).ToArray()
    

    或者更好:

    Dim time As New TimeSpan(10, 20, 59)
    
    Dim rows As DataRow() = (From row In myDatatable.AsEnumerable
                                 Where row.Field(Of DateTime)("column").TimeOfDay > time).ToArray()
    

    【讨论】:

    • 感谢您的回复。这确实是一个解决方案。我可以在 linq 查询中选择行 ID,并将行过滤器设置为类似于“行 ID IN(,我将聚合 ID 放在其中......正如我所说,这是一个解决方案,但可能有点太多开销??? =/
    • 开销是什么意思?我会推荐 Linq 用于您对数据表的所有查询,它是强类型的并且是为此目的而制作的。另一方面,DataTable.Select 不是强类型的,在这种情况下,使用起来要困难得多。作为旁注,首先将数据读取到数据表有点过时,实体框架将是更好的选择。
    • 有开销我的意思是它比需要的内存更持久。首先,我需要为每一行执行 linq 查询、解析、转换字段,我需要检查 where 部分的次数......在这个例子中两次: Where row.Field(Of DateTime)("column ").TimeOfDay >= time(h:m):00 AND ...TimeOfDay
    • 执行此操作的最有效方法是 SQL,因此如果可以,请在此处执行。关于开销,使用 .select-method 执行此操作的开销不亚于使用 linq 执行此操作。如果列已经是日期时间类型,也不会转换为日期时间。那 (Of DateTime) 只告诉编译器该列是 datetime 类型。
    【解决方案2】:

    我想出了以下解决方案:

    RowFilter = Convert(columnname, 'System.String') like '%" & pTime.ToString("hh:mm") & "%'

    这就是我目前所需要的一切。对于搜索 >=/

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多