如何跳过linq列表中的一列(可能更多)数据

时间:2013-05-07 20:36:48

标签: c# linq generic-list linq-to-excel

我正在将两个excel工作表(使用Linq-To-Excel)的输入读入两个列表。其中一个工作表有一个不需要的数据列(列名已知)。但是,两个工作表中的其他列包含完全相同类型的数据。

我的问题的第一部分是:
如何在select语句中只排除那些未经过破坏的数据列(不必为其他25个左右的列写select.column名称?我打算为以下目的执行此操作:

  1. 制作相同类型的列表
  2. 合并两个列表
  3. 可能会将此代码块移动到调用过程,因为最终我将不得不从更多工作表中读取

    ExcelQueryFactory excel = new ExcelQueryFactory(FilePath);
    List<STC> stResults = (from s
                           in excel.Worksheet<STC>("StaticResults")
                           select s)
                           .ToList();
    
    List<DYN> dynResults = (from s
                            in excel.Worksheet<DYN>("DynamicResults")
                            select s)      //how can I EXCLUDE just one of the columns here??
                            .ToList();
    
  4. 我是c#和linq的新手。所以请原谅我的无知: - )

    我的问题的第二部分是:
    我正在提取的上述数据有点胖(从100,000到300,000行不等)。我必须使用for循环在上面的列表上(在1000到4000倍的范围内)继续给出重复的linq查询。是否有更好的方法来实现这一点,因为它会对性能产生巨大影响。


    EDIT_1:
    关于输入文件:

    1. StaticResults文件有28个列(STC类有28个属性)
    2. DynamicResults文件有29列(28列具有与静态相同的属性/列名称加上一个附加属性,这不是必需的)(DYN是来自STC的派生类)

2 个答案:

答案 0 :(得分:0)

从linq中选择结果时使用匿名类型。

ExcelQueryFactory excel = new ExcelQueryFactory(FilePath);
List<STC> stResults = (from s
                       in excel.Worksheet<STC>("StaticResults")
                       select s)
                       .ToList();

List<DYN> dynResults = (from s
                        in excel.Worksheet<DYN>("DynamicResults")
                        select new {Property1 = s.xxx, Property2 = S.yyy)      //get the props based on the type of S
                        .ToList();

答案 1 :(得分:0)

无意中找到了我的第一个问题的解决方案。可能没什么好看的,但不过想到会在这里分享它。

  1. 摆脱了第二堂课DYN
  2. 制作第二个列表是STC类型
  3. 这样,生成的两个列表都只提取了所需的属性/列(在类中声明的属性)。不需要额外的列被跳过(因为我没有将它们定义为类中的属性。我认为,这是linq-to-excel的礼貌。我想知道更多关于它的信息,如果有人可以更深入地了解它。)