VB.NET Dataview Rowfilter 按时间
Posted
技术标签:
【中文标题】VB.NET Dataview Rowfilter 按时间【英文标题】:VB.NET Dataview Rowfilter by Time 【发布时间】: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...
?
找不到与此问题相关的任何内容?我真的是第一个想要这种功能的人吗?
【问题讨论】:
【参考方案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") & "%'
这就是我目前所需要的一切。对于搜索 >=/
谢谢
【讨论】:
以上是关于VB.NET Dataview Rowfilter 按时间的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 DataView 的 RowFilter 使用关键字“IN”来过滤集合
DataSetDataTableDataView三者关系及DataView 常见用法