Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ在数据表中查找无效日期_C#_Linq_Datatable - Fatal编程技术网

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进行解析的方法