A>>Что-то мне не нравиться смешивание домена и чистых данных (ДатаТэйбл). Что мешает вместо дататэйбла испольовать коллекции? Коллекции отлично биндятся на любые контролы (Forms или ASP).
А>там есть ряд моментов.
А>Во-первых, насколько знаю, коллекции все-таки не так уж и удобно биндить в грид — поля объекта высвечиваются в гриде в виде своего метода ToString(), а мне иногда нужно только какое-нибудь одно его поле, а не все строковое представление (ну например светим в грид объект аккаунт, который содержит параметры подключения, так вот для объекта ПараметрыПодключение мне надо не один столбец, а несколько, что-бы пользователь мог легче их просматривать
Не обязательно доменные объекты напрямую биндить на гриды. За пол часа можно наваять SomeObjectInfo который предоставит доступ только к нужным элементам.
А>и сортировать (кстати стандартный List<> вообще сортировку и фильтрацию не поддерживает, это самому похоже надо приделывать, и спрашивается нафига это делать, если куда проще взять готовый DataTable ?))
Сортировку по любому полю легко сделать самостоятельно (см. конец поста).
А с фильтрацией действительно траблы. Хотя ничего не стоит получать данные уже отфильтрованными (да не всегда удобно, но это "не всегда" всего 5% от всех запростов) (девекспресовский грид умеет сам фильтровать и сортировать, правда он платный, зараза).
А>Во-вторых какой вообще смысл полученные строки превращать в объекты — на стадии поиска нужного клиента или аккаунта мне нужны только их идентификаторы. Собирание из них объектов только будет занимать время и память. А если их еще и закэшировать, так и вся оперативка забъется объектами, 99% которых в сеансе даже не потребуются.
Сборка объекта не стоит ничего по сравнению с обращением к базе.
Про идентефикаторы ничего не понял
В большинстве случаем память занимаемая объектом == памяти занимаемой всеми его частями (ну может еще несколько байт, но это фигня).
Никто не говорит, что нужно забрать из базы все что касается искомого объекта. Есть Lazy Load.
А>В третьх, некоторые запросы возвращают данные, которые не относяться к существующим объектам, например суммарное количество заявок клиента за полгода. Тут и вообще никуда не деться 
Действительно. Нужно обдумать эту мысль.
И все же хочу уточнить, что я не против ДатаТэйблов. Когда нужно просто посмотреть и отредактировать данные по скорости и удобству (поддержка .Net) им нет равных, но вот когда в просмотр и редактирование вкрадывается логика... Лучше сразу от них отказываться (ИМХО).
P.S.
public class GenericComparer<T> : IComparer<T>
{
private int _directionMylt = 1;
private PropertyInfo _sortPropertyInfo;
private Comparer _internalComparer = new Comparer(CultureInfo.CurrentUICulture);
public GenericComparer(string sortByProperty, SortDirection direction)
{
_sortPropertyInfo = typeof(T).GetProperty(sortByProperty);
if(_sortPropertyInfo == null)
{
throw new ArgumentException("There is no property '" + sortByProperty + "' in " + typeof(T).ToString());
}
switch (direction)
{
case SortDirection.Ascending:
_directionMylt = +1;
break;
case SortDirection.Descending:
_directionMylt = -1;
break;
}
}
private object GetValueToCompare(T instance)
{
return _sortPropertyInfo.GetValue(instance, null);
}
private int InternalCompare(T x, T y)
{
object xValue = GetValueToCompare(x);
object yValue = GetValueToCompare(y);
return _internalComparer.Compare(xValue, yValue);
}
public int Compare(T x, T y)
{
return _directionMylt * InternalCompare(x, y);
}
}
... << RSDN@Home 1.2.0 alpha 4 rev. 1067>>