Метод расширения OrderBy принимает делегата для получения ключа сортировки, а не столбца и направления. Итак, эта строка:
listOfRfidTags = listOfRfidTags.OrderBy(sort.Column, sort.Direction);
должно выглядеть примерно так:
listOfRfidTags = listOfRfidTags.OrderBy(r => r.SomeProperty);
(или OrderByDescending в зависимости от сортировки. Направление). Проблема в том, что SomeProperty не может быть определен во время компиляции, потому что вы хотите, чтобы он пришел из sort.Column. Это означает, что если вы хотите использовать LINQ, вам, вероятно, потребуется использовать Dynamic LINQ или Reflection для извлечения свойства, которое вы хотите отсортировать, например,
PropertyInfo property = typeof(RfidTag).GetProperty(sort.Column);
listOfRfidTags = listOfRfidTags.OrderBy(r => property.GetValue(r));
Однако, поскольку вы используете LightSpeed в качестве ORM, вы можете обойти LINQ и использовать базовый API, который делает разрешающими динамические имена столбцов:
Order order = Order.By(sort.Column);
if (sort.Direction == SortDirection.Descending))
order = order.Descending();
IList<RfidTag> listOfRfidTags = uow.Find<RfidTag>(new Query { Order = order });
Это дает дополнительное преимущество: сортировка будет выполняться в базе данных, а не в веб-приложении.