代码之家  ›  专栏  ›  技术社区  ›  tpow

LinqToExcel语法

  •  2
  • tpow  · 技术社区  · 14 年前

    我使用的是麻省理工学院开发的LinqToExcel项目,托管在Google代码上 http://code.google.com/p/linqtoexcel/wiki/UsingLinqToExcel .

       //These lines are fine
       IEnumerable<string> names = new List<string>();
       var excel = new Excel.ExcelQueryFactory(_excelFilePath);
    
       //This line shows a syntax error starting from c[0]
        names = from c in excel.WorksheetRange("A1", "AI1", headerName)
                    c[0] == "IN"
                    select c;
    

    这个语法正确吗?链接页上的代码是C#?


    更新:在得到一些答案后,似乎缺少的“Where”确实是一个拼写错误。然而,即使使用“where”,我也无法让c[4]=“IN”返回单元格A5。我可以通过删除整个where子句来完成我需要的任务,它返回了指定的整个范围。在最初的帖子中,我只是想返回一个单独的值—baby steps:)

    为了标记答案-我如何只返回范围内的一个单元格?也许是 == "IN" 是某种打字错误,而不是LinqToExcel的实际构造?

    5 回复  |  直到 14 年前
        1
  •  6
  •   Klaus Byskov Pedersen    14 年前

    应该是:

    var names = from c in excel.WorksheetRange("A1", "AI1", headerName) 
                where c[0] == "IN" 
                select c; 
    
        2
  •  2
  •   Pharabus    14 年前

    我想你需要一个 where 在那里,可能是文件页上的错别字,你试过了吗

      //These lines are fine
       //IEnumerable<string> names = new List<string>(); removed this as not really needed
       var excel = new Excel.ExcelQueryFactory(_excelFilePath);
    
       //This line shows a syntax error starting from c[0]
       var names = from c in excel.WorksheetRange("A1", "AI1", headerName)
                    where  c[0] == "IN"
                    select c;
    

    编辑更新以添加 var

        3
  •  2
  •   James Curran    14 年前

    在该页面上,显示的查询中约有一半具有 where 一半没有。我想这只是复制粘贴的错误。这不是LinqToExcel可以控制的语法的一部分。

    但是,我注意到你说过,没有那一行,就不会返回结果。这是另一个问题,因为没有那条线, 应该已经返回(不过,如果我读对了,您的范围只有一行)。但是,我将假设LinqToExcel的工作方式类似于LinqToSql和LinkToObject,而且它确实如此 惰性评估 ,这意味着在您实际逐步完成查询之前,它不会执行查询。

    还有一点:

     IEnumerable<string> names = new List<string>(); 
     names = from c in excel.WorksheetRange("A1", "AI1", headerName) 
                where c[0] == "IN" 
                select c; 
    

    第一行创建一个字符串列表,然后在下一行丢弃。许多新的C#程序员似乎认为新的是需要声明变量的类型,但这完全由 IEnumerable<string> 部分。这个 new 是不必要的。这一行可以写成:

     IEnumerable<string> names = null;
    

     IEnumerable<string> names;
    

    或者可以与第二行结合:

     IEnumerable<string> names 
         = from c in excel.WorksheetRange("A1", "AI1", headerName) 
                where c[0] == "IN" 
                select c; 
    

     var names = from c in excel.WorksheetRange("A1", "AI1", headerName) 
                where c[0] == "IN" 
                select c; 
    
        4
  •  1
  •   Alex Reitbort    14 年前

    试试这个:

       //These lines are fine
       IEnumerable<string> names = new List<string>();
       var excel = new Excel.ExcelQueryFactory(_excelFilePath);
    
       //This line shows a syntax error starting from c[0]
        names = from c in excel.WorksheetRange("A1", "AI1", headerName)
                    where c[0] == "IN"
                    select c;
    
        5
  •  0
  •   pix    8 年前

    当您只想检索一些列,传递列字母时,我的问题就出现了,我发现这是在放置条件。

    var LetterColumn = {A, C, D}
    var clientData = from c in excelFile.WorksheetRangeNoHeader("A1", "G10", "Sheet1")
    .Where(c.contains(LetterColumn))
    .Select c
    

    Image 1

    Image 2

    我的对象类型是RowNoHeader

    谢谢!!