C# LinqToExcel到EPPlus

C# LinqToExcel到EPPlus,c#,asp.net,excel,epplus,linq-to-excel,C#,Asp.net,Excel,Epplus,Linq To Excel,我正在将一个项目转移到Azure。该项目正在使用LinqToExcel从Excel文件中读取数据 LinqToExcel有几个依赖项,Azure WebApp不支持这些依赖项。因此,我正在将代码迁移到EPPlus 但是,像这样的查找如何在ePlus中查找 var excel = new ExcelQueryFactory(excelFile); var results = from c in excel.Worksheet(mySheet) where c[

我正在将一个项目转移到Azure。该项目正在使用LinqToExcel从Excel文件中读取数据

LinqToExcel有几个依赖项,Azure WebApp不支持这些依赖项。因此,我正在将代码迁移到EPPlus

但是,像这样的查找如何在ePlus中查找

var excel = new ExcelQueryFactory(excelFile);
var results = from c in excel.Worksheet(mySheet)
                   where c["columnName"] == Value1.ToString()
                   select c;

myValue = results.First()["MyColumnName2"]

从我开始研究LinqToExcel已经好几年了,但据我记忆,它将列视为对象的属性—实际上有点光滑。但EPPlus并没有构建这种封装

以类似此文件的内容为例:

如果你想让所有公司超过200名的员工和首席执行官在他们的名字里写上
s
,那么你能做的最好的事情就是:

var fi = new FileInfo(@"C:\temp\Companies.xlsx");

using (var pck = new ExcelPackage(fi))
{
    var wb = pck.Workbook;
    var ws = wb.Worksheets["Sheet1"];

    var headerRow = ws.Cells
        .Where(cell => cell.Start.Row == 1)
        .ToList();

    var ceoCountColNum = headerRow
        .First(cell => cell.Value.ToString() == "CEO")
        .Start
        .Column;

    var empCountColNum = headerRow
        .First(cell => cell.Value.ToString() == "EmployeeCount")
        .Start
        .Column;

    var rows = ws.Cells
        .GroupBy(cell => cell.Start.Row)
        .Skip(1)
        .Select(g => g.ToList())
        .Where(row =>
            (double) row[empCountColNum - 1].Value > 200 &&
            row[ceoCountColNum - 1].Value.ToString().Contains("s"))
        .ToList();

    Console.WriteLine(rows.Count);  //return 2
}