Wiem, że możemy to łatwo zrobić za pomocą prostej pętli, ale chcę utrwalić ten LINQ / Predicate?
string[] columnNames = dt.Columns.?
or
string[] columnNames = from DataColumn dc in dt.Columns select dc.name;
Spróbuj tego (składnia metody LINQ):
string[] columnNames = dt.Columns.Cast<DataColumn>()
.Select(x => x.ColumnName)
.ToArray();
lub w składni zapytania LINQ:
string[] columnNames = (from dc in dt.Columns.Cast<DataColumn>()
select dc.ColumnName).ToArray();
Cast
jest wymagany, ponieważ Columns jest typu DataColumnCollection, który jest a IEnumerable
nie IEnumerable<DataColumn>
. Pozostałe części powinny być oczywiste.
string[] columnNames = dt.Columns.Cast<DataColumn>().Where(x => x.ColumnName != "ABC").Select(x => x.ColumnName).ToArray();
Posługiwać się
źródło
using
stwierdzenie jest automatycznie dodawane tak często, że nigdy nie przyszło mi do głowy, żeby to sprawdzić.Sugerowałbym użycie takiej metody rozszerzenia:
I dlatego:
Możesz także zaimplementować jeszcze jedną metodę rozszerzenia
DataTable
klasy, aby zredukować kod:I użyj go w następujący sposób:
źródło
źródło