使用LINQ从System.Array转换为List <string>,需要保留空值</string>

时间:2014-01-14 08:44:21

标签: c# wpf excel linq interop

在我的项目中,我使用互操作连接(4.5之前的.NET WPF应用程序)将2列转换为易于使用List的列。这里的问题在于我正在阅读的两列中的一列有很多空值;大多数是空的;并且选择过程决定跳过它们而不是填入空值,所以现在我留下了2个不均匀的列,不再代表2×X excel表(X在这里大约是1500,所以这种方法相当节省时间) ;

Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(pathName, 0, true, 5,"", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
Excel.Range range = xlWorkSheet.UsedRange;

range = xlWorkSheet.UsedRange.Columns[1];
System.Array myvals = (System.Array)range.Cells.Value;
xmlData.AddRange(myvals.OfType<object>().Select(O => O.ToString()).ToList());

range = xlWorkSheet.UsedRange.Columns[2];
myvals = (System.Array)range.Cells.Value;
xmlCode.AddRange(myvals.OfType<object>().Select(P => P.ToString()).ToList());

有关如何在xmlData中保留空值的任何信息xmlCode列表将受到高度赞赏。至于我自己能够指出它;它与选择过程有关。所有值都存在于范围的System.Array强制转换中。

谢谢!

1 个答案:

答案 0 :(得分:3)

试试这个:

xmlData.AddRange(myvals.Cast<object>().Select(O => O == null ? 
                                                      string.Empty : 
                                                      O.ToString()).ToList());