Динамическая LINQ & CSLA BusinessListBase - PullRequest
0 голосов
/ 27 марта 2009

У меня проблема, которая просто убивает меня. Один из моих объектов CSLA (скажем, Parent) имеет много дочерних элементов (назовем их Children - список Child). Родитель является редактируемым корневым каталогом (BusinessBase), а дочерние элементы - это редактируемый дочерний список (BusinessListBase), а дочерний элемент - редактируемый дочерний.

Что я пытаюсь сделать, это сделать это: Parent x = Parent.GetParent (id); IQueryable y = Parent.MyChildren.OrderBy ("Age DESC");

Теоретически, y следует заполнить коллекцией детей, отсортированных по возрасту в порядке убывания (при условии, что «Age» является свойством объекта Child).

Но, что я получил, это то, что y.Count () = 0. Хотя, если я делаю Parent.MyChildren.Count (), нет 0. Это ошибка в Dynamic LINQ или CSLA? Это (ошибка) не происходит в списке только для чтения для меня.

Помощь! Джо

1 Ответ

1 голос
/ 27 марта 2009

Джо

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

Основываясь на том, что я могу сказать, копаясь в коде CSLA 3.5, BusinessListBase реализует IQueryable (на самом деле это код "C" в коде CSLA, как в "Child"). Класс ReadOnlyListBase этого не делает.

Это может повлиять на то, какой метод расширения Dynamic LINQ OrderBy вызывается (их два), а один для IQueryable просто вызывает версию OrderBy для обычного IQueryable.

С другой стороны, если вы следуете за IQueryable в BusinessListBase, свойство Provider (типа IQueryProvider) делегирует CslaQueryProvider.

public IQueryProvider Provider
{
  get {
    return new Linq.CslaQueryProvider<T, C>(this);
  }
}

Все это говорит о том, что из-за ограниченного времени, которое мне пришлось потратить, я думаю, что углубление (с отладчиком, да!) В материал CSLA LINQ, вероятно, оправдано. Из других обсуждений и продолжений в других местах я видел, что вы также указали на ошибку / проблему, зарегистрированную для CSLA. Вот ссылка:

Идентификатор проблемы CSLA 326 - OrderBy должен возвращать LinqBindingList, который работает с связанными сетками

Я подозреваю, что это больше связано с реализацией IQueryable в BusinessListBase, чем с чем-либо еще. И снова, похоже, что ReadOnlyListBase не реализует IQueryable ни напрямую, ни через наследование (в моей копии CSLA 3.5).

Надеюсь, это поможет.

Джефф Миллер

...