Я знаю, что мы можем легко сделать это с помощью простого цикла, но я хочу сохранить этот LINQ / Predicate?
string[] columnNames = dt.Columns.?
or
string[] columnNames = from DataColumn dc in dt.Columns select dc.name;
Попробуйте это (синтаксис метода LINQ):
string[] columnNames = dt.Columns.Cast<DataColumn>()
.Select(x => x.ColumnName)
.ToArray();
или в синтаксисе запроса LINQ:
string[] columnNames = (from dc in dt.Columns.Cast<DataColumn>()
select dc.ColumnName).ToArray();
Cast
является обязательным, поскольку Columns имеет тип DataColumnCollection, а IEnumerable
не IEnumerable<DataColumn>
. Остальные части должны быть очевидны.
string[] columnNames = dt.Columns.Cast<DataColumn>().Where(x => x.ColumnName != "ABC").Select(x => x.ColumnName).ToArray();
Использовать
источник
using
утверждение автоматически добавляется так часто, что мне никогда не приходило в голову проверить его.Я бы предложил использовать такой способ расширения:
И поэтому:
Вы также можете реализовать еще один метод расширения для
DataTable
класса, чтобы уменьшить код:И используйте его следующим образом:
источник
источник