Вы можете использовать LINQ-To-DataTable вместо:
employees = employees.AsEnumerable()
.OrderBy(row => row.Field<string>("ColumnName").FirstOrDefault())
.CopyToDataTable();
Обратите внимание, что вам нужно добавить using System.Linq
в верхней части файла.
Может быть, вы найдете синтаксис запроса более читабельным:
var rows = from row in employees.AsEnumerable()
let value = row.Field<string>("ColumnName")
orderby value.FirstOrDefault()
select row;
employees = rows.CopyToDataTable();
UPDATE: «После сортировки, нужно выбрать только те, которые начинаются с данной буквы»
Тогда вы, вероятно, хотите для фильтрации записей, поэтому используйте Enumerable.Where
:
Так или:
employees = employees.AsEnumerable()
.Where(row => row.Field<string>("ColumnName").StartsWith("A", StringComparison.CurrentCultureIgnoreCase))
.OrderBy(row => row.Field<string>("ColumnName").FirstOrDefault())
.CopyToDataTable();
или (тот же синтаксис запроса):
var rows = from row in employees.AsEnumerable()
let value = row.Field<string>("ColumnName")
where value.StartsWith("A", StringComparison.CurrentCultureIgnoreCase)) // for example
orderby value.FirstOrDefault()
select row;
employees = rows.CopyToDataTable();
Однако теперь orderby
довольно бессмысленно, так как вы хотите заказать записи по первой букве, которые начинаются все с той же буквы в любом случае.
Зачем вам нужно использовать свойство 'Sort' и не использовать LINQ? Зачем это вам вообще нужно, так как 'Sort =" ColumnName asc "' порядки по полному полю, включая первую букву. Поэтому разница должна быть предельной. –
После сортировки мне нужно выбрать только те, которые начинаются с данной буквы. Использование 'Sort' является требованием, поэтому я ищу решение, которое содержит его. –
Тогда это требование довольно бессмысленно, так как вы хотите сортировать записи по первой букве, которые все начинаются с того же письма в любом случае. Тем не менее, я отредактировал свой ответ, чтобы показать, как изменить LINQ-запрос для фильтрации записей. –