EdWood
EdWood

Reputation: 907

LINQ C# select multiple columns by names in arrays

Is it possible to select columns by names or indexes, which are stored in array?

String[] columnsWhichINeed = new String[] { "column1", "column2" };

DataColumn[] aCols = dataTable.Columns.Cast<DataColumn>()
          .Where(c => c.ColumnName.NEEDSOMEMAGICHERE;
          .Select(c => new DataColumn(c.ColumnName, c.DataType))
          .ToArray();

Upvotes: 0

Views: 1059

Answers (2)

itsme86
itsme86

Reputation: 19496

I think what you're looking for is Contains():

DataColumn[] aCols = dataTable.Columns.Cast<DataColumn>()
      .Where(c => columnsWhichINeed.Contains(c.ColumnName))
      .Select(c => new DataColumn(c.ColumnName, c.DataType))
      .ToArray();

unless you need to do case-insensitive string matching, in which case you'll need Any():

DataColumn[] aCols = dataTable.Columns.Cast<DataColumn>()
      .Where(c => columnsWhichINeed.Any(c2 => string.Compare(c.ColumnName, c2, true) == 0))
      .Select(c => new DataColumn(c.ColumnName, c.DataType))
      .ToArray();

Upvotes: 0

Rahul
Rahul

Reputation: 77876

You can probably use Contains() method like

.Where(c => columnsWhichINeed.Contains(c.ColumnName));

Upvotes: 3

Related Questions