В моей базе данных есть эти три таблицы, среди прочих
![My database model](https://i.stack.imgur.com/tW08Z.png)
ПЕРЕВОД имеет ненулевой внешний ключ для UNIT и обнуляемый внешний ключ для ASSIGNMENT . UNIT может иметь больше TRANSLATIONS .
Я хочу выполнить один запрос, который возвращает результат со следующей структурой:
Language | Assignment | First SUM | Second SUM | Third SUM
==========================================================
1 | 2 | 456 | 126 | 0
1 | 3 | 5361 | 1367 | 89
... | ... | ... | ... | ...
Результаты будут сгруппированы по TRANSLATION.fk_language и TRANSLATION.fk_assignment . Основной вопрос для меня - заполнить оставшиеся столбцы:
First SUM = SUM(unit.word_count)
Second SUM = SUM(unit.word_count) WHERE translation.status = 1
Third SUM = SUM(unit.word_count) WHERE translation.status = 2
Даже если я ограничусь столбцом First SUM
в результате, я не могу заставить его работать:
var result = session.QueryOver<Translation>()
.JoinQueryOver<Unit>(x => x.Unit)
.Select(Projections.Group<Translation>(x => x.Language),
Projections.Group<Translation>(x => x.Assignment),
Projections.Sum<Unit>(x => x.WordCount))
.List<object>()
.ToList();
Это не с
не удалось разрешить свойство: WordCount of: Entities.Translation
Большое спасибо за любые предложения.
РЕДАКТИРОВАТЬ: Вот мои отображения:
public class TranslationMap : ClassMap<Translation>
{
public TranslationMap()
{
Table("\"TRANSLATION\"");
LazyLoad();
Id(x => x.Id, "id").GeneratedBy.HiLo("hilo", "hilo_translation", "200");
Map(x => x.Status).Column("status");
References<Language>(x => x.Language, "fk_id_language").Not.Nullable().Cascade.None();
References<Unit>(x => x.Unit, "fk_id_translation_unit").Cascade.None();
References<Assignment>(x => x.Assignment, "fk_id_translator_assignment").Nullable().Cascade.None();
DynamicUpdate();
}
}
public class UnitMap: ClassMap<Unit>
{
public UnitMap()
{
Table("\"UNIT\"");
LazyLoad();
Id(x => x.Id, "id").GeneratedBy.HiLo("hilo", "hilo_translation_unit", "200");
Map(x => x.Text).Column("text");
Map(x => x.WordCount).Column("word_count");
HasMany(x => x.Translations).Inverse().KeyColumn("fk_id_translation_unit").Cascade.None();
}
}
public class AssignmentMap : ClassMap<Assignment>
{
public AssignmentMap()
{
Table("\"TRANSLATOR_ASSIGNMENT\"");
LazyLoad();
Id(x => x.Id, "id").GeneratedBy.HiLo("hilo", "hilo_translator_assignment", "50");
}
}