C# 使用LINQ在数据表中查找无效日期
我有一个带有日期列的C# 使用LINQ在数据表中查找无效日期,c#,linq,datatable,C#,Linq,Datatable,我有一个带有日期列的数据表(从EXCEL加载) 我需要验证date列是否有效,如果不是,则返回无效日期的数目 例如: Col1 ColDate --------------- k1 21/11/2016 k2 25/10/1975 k3 31/2/2016 k4 abcd 上表应返回2(因为最后两行包含无效日期) 如何使用LINQ查找无效行?希望此代码能帮助您 string[] dates = { "10-10-2015", "41-50-5880",
数据表
(从EXCEL加载)
我需要验证date列是否有效,如果不是,则返回无效日期的数目
例如:
Col1 ColDate
---------------
k1 21/11/2016
k2 25/10/1975
k3 31/2/2016
k4 abcd
上表应返回2(因为最后两行包含无效日期)
如何使用LINQ查找无效行?希望此代码能帮助您
string[] dates = { "10-10-2015", "41-50-5880", "awewe" };
foreach (var Date in dates)
{
try
{
Console.WriteLine(DateTime.Parse(Date));
}
catch (FormatException ex)
{
Console.WriteLine("Invaid Date");
}
}
输出
10/10/2015 12:00:00 AM
Invaid Date
Invaid Date
var Dates = (from dd in dates
select WE(dd)).ToList();
public static string WE(string Date)
{
try
{
return DateTime.Parse(Date).ToString();
}
catch (FormatException ex)
{
return "Invalid Date";
}
}
使用Linq
10/10/2015 12:00:00 AM
Invaid Date
Invaid Date
var Dates = (from dd in dates
select WE(dd)).ToList();
public static string WE(string Date)
{
try
{
return DateTime.Parse(Date).ToString();
}
catch (FormatException ex)
{
return "Invalid Date";
}
}
添加功能
10/10/2015 12:00:00 AM
Invaid Date
Invaid Date
var Dates = (from dd in dates
select WE(dd)).ToList();
public static string WE(string Date)
{
try
{
return DateTime.Parse(Date).ToString();
}
catch (FormatException ex)
{
return "Invalid Date";
}
}
输出
10/10/2015 12:00:00 AM
Invaid Date
Invaid Date
遵循LINQ应该做这项工作。如果不适合使用固定区域性,还可以将
CultureInfo
传递给TryParse
方法
DateTime date;
var itemsWithInvalidDates = items.Where(item => !DateTime.TryParse(item.ColDate, out date))
.ToList();
如果您确实确定所有日期都有此格式,请尝试以下方法(代码假设您的数据是字符串集合): 如果
2016年2月31日
为无效日期,但2016年2月01日
为有效日期,则应将查询更新为:
dates.Count(x =>
{
DateTime val;
return DateTime.TryParseExact(x, "dd/MM/yyyy",
CultureInfo.InvariantCulture, DateTimeStyles.None, out val)
|| DateTime.TryParseExact(x, "dd/M/yyyy",
CultureInfo.InvariantCulture, DateTimeStyles.None, out val) ;
})
在LINQ条件下使用Date.TryParse
publicstaticvoidmain(字符串[]args)
{
//你的密码在这里
DataTable=GetDataTable();
日期时间日期;
var dataRows=datatable.AsEnumerable()。其中(myRow=>DateTime.TryParse(myRow.Field(“ColDate”),out date));
foreach(数据行中的数据行)
Console.WriteLine(第[“ColDate”行]);
}
您可以循环尝试执行解析日期,看看它是否允许您使用LINQ进行解析。在上面的示例中,所有记录都以非日期返回。首先,在不使用LINQ的情况下发布正在执行解析的代码,然后如果您仍然无法自己进行解析,请请求LINQ翻译。谢谢,我正在寻找使用LINQ进行解析的方法