DataTable Custom LINQ OrderBy - PullRequest
       4

DataTable Custom LINQ OrderBy

1 голос
/ 01 февраля 2012

Я продолжаю получать объект, не установленный для экземпляра объекта, и я не уверен, почему.

SortColumn тип данных string Данные: "123 | bob", DBNull.Value, "234 |sam "," 345 | jim "

Пока у меня есть это:

table = table.AsEnumerable().OrderBy(
   o => o.Field<object>(sortColumn) == 
          DBNull.Value ? 99999 : o.Field<string>(sortColumn).Split('|')[0].TryParse(0)
          ).CopyToDataTable();

public static int TryParse(this string input, int valueIfNotConverted)
{
    int value;
    if (Int32.TryParse(input, out value))
    {
        return value;
    }
    return valueIfNotConverted;
}

В основном хочу отсортировать деталь перед |в порядке возрастания (CopyToDataTable() возвращает отсортированную таблицу)

1 Ответ

2 голосов
/ 01 февраля 2012

Я считаю, что метод расширения Field<> обрабатывает DBNull для вас, так что вы можете просто проверить нулевое значение ( больше информации ):

... o.Field<object>(sortColumn) == null ? 99999 ...

С другой стороны, вы можете избежать двойного доступа к полю, сначала выбрав все значения столбца, а затем разделив:

table
    .AsEnumerable()
    .Select(row => row.Field<string>(sortColumn))
    .OrderBy(value => value == null ? 99999 : Convert.ToInt32(value.Split('|').First()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...