2013-10-02 68 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