Linq:选择List <string> </string>中的位置

时间:2013-10-02 14:07:53

标签: c# asp.net-mvc linq linq-to-excel

在这里使用一些LinqToExcel过滤......

我有一个包含9个字符串的List<string> columnsToFilter,我希望过滤出List<Row>中某些列的数据,其中Row包含属性

IEnumerable<string> ColumnNames
Cell this[string columnName]

所以:List<Row>说30行,每行有12个ColumnNames。现在我想使用List<Row>过滤List<string> columnsToFilter,这样我最终会得到30行List<Row> 9 ColumnNames。

我可以通过查询列名来选择 one 列的数据:

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

现在我想根据字符串List<string> columnsToFilter List 过滤数据。什么是实现这一目标的最佳方式?

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

定义一个名为MyObject的对象,其对应的属性名称与您要选择的9列相对应。

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

宾果。您现在可以使用9列作为属性迭代30个对象。 请记住,LinqToExcel会很乐意填充对象,即使它们没有表示所有列。

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

答案 2 :(得分: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;
        }