Фильтрация с использованием дочерних FK-объектов Subsonic Active Record

В некоторых ORM, если существует отношение «один ко многим», класс, представляющий таблицу, обычно имеет один объект с именем столбца, например «Пользователь», и заполняет свойство содержимым соответствующей строки таблицы.

По какой-то причине Subsonic вместо этого решил добавить свойство ColumnName с добавленной к нему буквой s. Он возвращает IQueryable вместо одного пользовательского объекта.

Как вы подходите к фильтрации результатов на основе некоторых свойств пользователя?

Я пытался сделать что-то вроде этого:

 FileRecord thumbnailImageRecord = newsArticleVersion.NewsArticleVersionFileMaps
            .SingleOrDefault(f => f.FileRecords.Single().FilePurpose == 3)
            .FileRecords.Single();

Есть ли лучший способ сделать это в ORM или мне просто нужно использовать собственный Linq?


person Walt    schedule 08.12.2011    source источник


Ответы (1)


Это кажется недостатком SubSonic и заслуживает лучшего решения.

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

public partial class child {
  public parent parent {
    get { return parent.SingleOrDefault(x => this.parent_id == x.id); }
  }
}

Если у вас хватит смелости, можно будет сделать это более эффективно, изменив файл T4!

person david.pfx    schedule 19.12.2011
comment
Спасибо за ответ ... Думаю, я собираюсь отойти от Subsonic и перейти к LINQ to SQL и PLINQO. - person Walt; 02.01.2012