使用LINQ忽略CSV中的空字段

使用LINQ忽略CSV中的空字段,linq,c#-4.0,csv,Linq,C# 4.0,Csv,我有一个csv,看起来像: Column1,Column2,Column3,Column4,Column5,Column6,Column7,Column7,Column8,Column9, 45.50334645,5640192,3915776,52633600,351924224,12354,90505216,78790656,247287808, 39.23091283,5640192,3915776,52633600,349986816,4562,90505216,78790656,24

我有一个csv,看起来像:

Column1,Column2,Column3,Column4,Column5,Column6,Column7,Column7,Column8,Column9,
45.50334645,5640192,3915776,52633600,351924224,12354,90505216,78790656,247287808, 
39.23091283,5640192,3915776,52633600,349986816,4562,90505216,78790656,247287808, 
25.26042,5640192,3915776,52633600,349986816,   ,90505216,78790656,247287808,
我需要得到每列的最小值、最大值和平均值。我使用LINQ来实现这一点,因为CSV可能相当大

这是我目前的代码

var lines = System.IO.File.ReadAllLines(csvPath);
var columns = lines[0].Split(',');
for (int i = 1; i < columns.Count(); i++)
{
    var columnQuery = from line in lines
                        let elements = line.Split(',')
                        select Convert.ToDouble(elements[i]);

    var results = columnQuery.ToList();
    var min = results.Min();
    var max = results.Max();
    var avg = results.Average();
}
var-lines=System.IO.File.ReadAllLines(csvPath);
变量列=行[0]。拆分(',');
对于(int i=1;i
这将在csv中突出显示的值上出错,因为它被视为日期时间

我得到的错误是“输入字符串的格式不正确。”


谢谢您的帮助。

您可以使用三元运算符:

var columnQuery = from line in lines
                  let elements = line.Split(',')
                  select string.IsNullOrWhiteSpace(elements[i]) ? 0. : Convert.ToDouble(elements[i]);

您是否尝试过使用
Double.TryParse
而不是
Convert.ToDouble
来避免异常
或者使用
where元素[i].Trim()显式过滤掉空行“
之前选择

我不明白。里面有约会时间吗?为什么不使用
DateTime.TryParse
than?如果文件很大,请使用
file.ReadLines
。这将返回一个枚举数,并且不会立即加载整个文件(file.ReadAllLines所做的)。它没有日期时间。它只是认为这是因为它是一个空白字段。这是有效的。我试着模仿excel中的MIN、MAX和Average函数。我刚才看到,如果数据丢失,他们也会使用0。谢谢