DataTable Custom LINQ OrderBy

I keep getting object not set to an instance of an object and I'm not sure why.

SortColumn datatype string Data: "123|bob", DBNull.Value, "234|sam", "345|jim"

Tengo esto hasta ahora:

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;
}

Basically want to sort the part before | in ascending order (CopyToDataTable() returns the sorted table)

preguntado el 01 de febrero de 12 a las 14:02

1 Respuestas

Creo que el Field<> extension method handles DBNull for you, so you can just check for a null value (más información):

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

On a side note, you can avoid the double field access by selecting all of the column values first, then doing the split:

table
    .AsEnumerable()
    .Select(row => row.Field<string>(sortColumn))
    .OrderBy(value => value == null ? 99999 : Convert.ToInt32(value.Split('|').First()));

Respondido 01 Feb 12, 18:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.