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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/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
Arrays 使用LINQ查找数组中不存在的Excel列?_Arrays_Linq_Excel_Contains - Fatal编程技术网

Arrays 使用LINQ查找数组中不存在的Excel列?

Arrays 使用LINQ查找数组中不存在的Excel列?,arrays,linq,excel,contains,Arrays,Linq,Excel,Contains,我有一个可以满足我需要的解决方案,但我希望得到一些灵巧的LINQ类型来帮助我改进现有的,并在这个过程中学习新的东西 下面的代码用于验证电子表格中是否存在某些列名。我在使用列索引值或列名查找它们之间左右为难。它们都有优点和缺点,但决定使用列名。它们总是存在的,有时是以不同的顺序存在的,尽管我正在研究这个 详情: GetData方法从Excel电子表格返回数据表。我循环遍历数组中所有必需的字段名,查看它是否与电子表格上的列集合中的某些内容匹配。如果没有,则将缺少的列名追加到方法的输出参数中。我需要b

我有一个可以满足我需要的解决方案,但我希望得到一些灵巧的LINQ类型来帮助我改进现有的,并在这个过程中学习新的东西

下面的代码用于验证电子表格中是否存在某些列名。我在使用列索引值或列名查找它们之间左右为难。它们都有优点和缺点,但决定使用列名。它们总是存在的,有时是以不同的顺序存在的,尽管我正在研究这个

详情: GetData方法从Excel电子表格返回数据表。我循环遍历数组中所有必需的字段名,查看它是否与电子表格上的列集合中的某些内容匹配。如果没有,则将缺少的列名追加到方法的输出参数中。我需要boolean值和missing fields变量,并且我不确定还有比使用output参数更好的方法。然后,我从UI上显示的附加字符串中删除最后一个逗号。如果StringBuilder对象不为null,我也可以使用missingFieldCounter,然后我知道至少有一个缺少的字段,bool将为false。否则,我只将output param返回为空,将method返回为true

那么,是否有一种更灵活、更全面的方法来检查油田是否缺失,并以某种方式报告这些油田

 private bool ValidateFile(out string errorFields)
    {

        data = GetData();
        List<string> requiredNames = new [] { "Site AB#", "Site#", "Site Name", "Address", "City", "St", "Zip" }.ToList();

        StringBuilder missingFields = null;
        var missingFieldCounter = 0;

        foreach (var name in requiredNames)
        {

            var foundColumn = from DataColumn c in data.Columns
                              where c.ColumnName == name
                              select c;

            if (!foundColumn.Any())
            {
                if (missingFields == null)
                    missingFields = new StringBuilder();

                missingFieldCounter++;
                missingFields.Append(name + ",");
            }

        }

        if (missingFields != null)
        {
            errorFields = missingFields.ToString().Substring(0, (missingFields.ToString().Length - 1));
            return false;
        }

        errorFields = string.Empty;
        return true;    

    }

这是一个linq解决方案,可以实现同样的效果。 我调用ToArray函数来激活linq语句

        (from col in requiredNames.Except(
                from dataCol in data
                select dataCol.ColumnName
                )
            select missingFields.Append(col + ", ")
         ).ToArray();

        errorFields = missingFields.ToString();
        Console.WriteLine(errorFields);