因为项目需要,有些DataTable需要判断 D列是非No RPA(需要是时间)是否超过24小时,开始我试这样写的:
dt_TicketNo.Rows.Cast(Of System.Data.DataRow).
Where(Function(r) r("Receive Day(L1)").ToString = "" And r("Send Email Day(L1)").ToString <> "Non RPA" And
(system.DateTime.Now - system.DateTime.ParseExact(r("Send Email Day(L1)").ToString.Split({";"}, StringSplitOptions.None).Last,"yyyy-MM-dd HH:mm:ss",Nothing)).TotalHours > 24)
因为只有一个Where,当linq碰到是Non RPA的同时,也会将Non RPA转换为时间,导致报错,这时候我们可以写两个Where避免:
dt_TicketNo.Rows.Cast(Of System.Data.DataRow).
Where(Function(r) r("Receive Day(L1)").ToString = "" And r("Send Email Day(L1)").ToString <> "Non RPA") .
Where(Function(r) (system.DateTime.Now - system.DateTime.ParseExact(r("Send Email Day(L1)").ToString.Split({";"}, StringSplitOptions.None).Last,"yyyy-MM-dd HH:mm:ss",Nothing)).TotalHours > 24)
筛选Non RPA后再转换为DataTime就不会报错了