使用LINQ从Excel表读取

我正在尝试学习linq,需要帮助转换下面的for循环到linq查询。 在for循环结束时,我应该能够parsingexampleDataList并获取值。 我该怎么做?

string filename = Server.MapPath("/") + "MyExcelFileData.xlsx"; const int startRow = 1; IList<double> exampleDataList = new List<double>(); var existingFile = new FileInfo(filename); using (var package = new ExcelPackage(existingFile)) { ExcelWorkbook workBook = package.Workbook; var currentWorksheet = workBook.Worksheets.First(); for (int rowNumber = startRow + 1; rowNumber <= currentWorksheet.Dimension.End.Row; rowNumber++) { var col1Value = Convert.ToDouble(currentWorksheet.Cells[rowNumber, 1].Value); exampleDataList.Add(col1Value); } } 

首先改变这个:

 IList<double> exampleDataList = new List<double>(); 

至:

 List<double> exampleDataList = new List<double>(); 

没有必要使用接口而不是局部variables的具体types。 那么你就可以写:

 exampleDataList.AddRange( Enumerable.Range(startRow + 1, currentWorksheet.Dimension.End.Row) .Select(i => Convert.ToDouble(currentWorksheet.Cells[i, 1].Value))); 

你首先使用Enumerable.Range()辅助函数创build一个从startRow + 1currentWorksheet.Dimension.End.Row Enumerable.Range() 。 然后,使用Select()将该序列投影到其他的东西上。 Lambda只是模仿你在for循环中做了什么。

如果你正在学习LINQ的东西,我强烈build议看看EduLINQ的文章(从我们的 Jon Skeet)。 他们做得很好,你会了解如何实施的许多细节。

编辑:如由rae1n在注释中指出,如果exam​​pleDataList只包含来自此LINQ查询的数据(您不需要在查询之前添加东西),那么您可以使用ToList()Select()返回的枚举直接转换为List<double>