Некоторые мысли о Шепелявят, не характерный для Clojure (я не эксперт Lisp, таким образом, я надеюсь, что они главным образом корректны и полезны):
я знаю мало о компиляторе или теории интерпретатора, но каждый раз я кодирую в Lisp, это поражает меня, что как непосредственно создавать AST.
Это - часть того, что "код =, который данные" означают, кодируя в Lisp, много похож на заполняющиеся структуры данных (вложенные списки) с узлами AST. Удивительный, и легко читать также (с правильным текстовым редактором).
Так блоки кода просто вкладывается списки и перечисляет операции, часть языка. Таким образом, можно очень легко написать код Lisp, который генерирует код Lisp (см. макросы Lisp). Это делает Lisp программируемым (сам по себе!) язык программирования.
Это делает создание , DSL или интерпретатор в Lisp очень легки (см. также метакруговая оценка ).
И в большинстве систем Lisp, код (включая документацию) может анализироваться и заменяться в горячем режиме во время выполнения.
Затем большинству Систем Lisp получили своего рода Объектную Систему из CLOS, который является усовершенствованным (по сравнению со многими реализациями ООП) и настраиваемая Объектная Система (см. Искусство Протокола Метаобъекта).
Все эти функции, где изобретено давно, но я не уверен, что они доступны на многих других языках программирования (хотя большинство нагоняет, например, с закрытиями), таким образом, необходимо "открыть вновь" и привыкнуть к ним путем осуществления (см. книги в других ответах).
Убедитесь, что вы указали свойство SortExpression в поле шаблона
<asp:TemplateField HeaderText="Object Category ID" SortExpression="ObjectCategoryID">
<ItemTemplate>
<asp:Label ID="lblItems" runat="server" Text='<%# GetItems((int)DataBinder.Eval(Container.DataItem, "ObjectCategoryID"))%>' />
</ItemTemplate>
</asp:TemplateField>