2013-10-02 39 views
0

Struggeling在这里一些LinqToExcel过滤...的LINQ:选择在列表<string>

Ive得到了一个List<string> columnsToFilter包含9串,并与我想筛选出在List<Row>,其中某些列中的数据包含属性

IEnumerable<string> ColumnNames 
Cell this[string columnName] 

所以:List<Row>有说30行,每行具有12个COLUMNNAMES。现在我想用List<string> columnsToFilter来过滤List<Row>,这样我就得到了30行的List<Row>和012NColumnNames。

我可以quering的列名选择数据一个列:

var result = content.Select(m => m["Column1"]).ToList(); 

现在我想筛选基于字符串List<string> columnsToFilter列表数据。什么是达到这个目标的最好方法?

+0

有点不确定你在问什么。你问的是如何“过滤”,但是当你谈论“选择”时,你会使用“过滤器”,这通常被认为是“投影”而不是“过滤器”。 “过滤器”通常具有像“Where”或“Count”,“First”,“Single”这样的函数进行过滤。 – sircodesalot

+0

你说得对,我的意思是选择,我更新了这个问题。我可以使用字符串选择一列的数据,但我想要使用字符串列表来选择多列的数据 – stefjnl

+0

from here http://stackoverflow.com/questions/6772267/linq-syntax-selecting-multiple-列看起来像你可以使用|| –

回答

0

我结束了在两个步骤做这个:

 foreach (var column in columnNumbers) 
     { 
      yield return data.Select(m => m[column].Value.ToString()).ToList(); 
     } 

现在我有我需要的数据,但该行和列交换,所以我不得不换为列,反之亦然行:

 for (int i = 1; i < rowCount; i++) 
     { 
      var newRow = new List<string>(); 

      foreach (var cell in list) 
      { 
       newRow.Add(cell[i]); 
      } 

      yield return newRow; 
     } 
3

这是你在找什么?

var colnames = new List<string>(); 
var rows = new Dictionary<string, object>(); 
var result = rows.Where(kv => colnames.Contains(kv.Key)).Select(kv => kv.Value); 
+0

这或多或少的方向我想去,但在我的情况下,行不是一个字典,但IEnumerable ,其中行具有上述属性。所以,colnames.Contains(kv.Key)不起作用。在我的情况下,它是colnames.Contains(kv.ColumnNames),其中ColumnNames是IEnumerable 。 我想要的是使用了IEnumerable 对象上了IEnumerable COLUMNNAMES属性来选择只能匹配colnames列表的行 stefjnl

1

定义一个名为MyObject的对象,该对象的属性名称对应于要选择的9列。

var excel = new ExcelQueryFactory("excelFileName"); 
var myObjects = from c in excel.Worksheet<MyObject>() 
         select c; 

宾果。您现在可以遍历具有9列的30个对象作为属性。 请记住,LinqToExcel会很高兴地填充对象,即使它们没有表示所有的列。

你甚至可以有一个属性或方法作为MyObject的一部分称为“行”,这将是一个Dictionary()对象,所以如果你喜欢这个语法,你可以说myObject.row [“ColumnName”]引用一个值只是说myObject.ColumnName来获取值。就我个人而言,我宁愿处理实际属性,而不愿意使用字典卷积。

+0

我不知道,你可以一个对象映射到excelfile的_a selection_做, 感谢那!不幸的是,'excel.GetColumnNames(“sheettitle”)'对我来说没有任何用处(主要是将F10,F12等作为列名呈现)。所以如果有一种方法可以将myObject.row映射到列索引或其他东西,那就太棒了。 – stefjnl