NHibernate QueryOver、投影和别名

标签 nhibernate queryover nhibernate-projections

我在投影 sql Coalesce 函数时遇到了 nhibernate 问题。

我正在比较来自两个不同实体的两个具有相同名称的字符串属性。在生成的 SQL 中,仅比较第一个实体的相同属性,如下所示:

var list = Projections.ProjectionList();
list.Add(
   Projections.SqlFunction("Coalesce",
    NHibernateUtil.String,
    Projections.Property<TranslatedText>(tt => tt.ItemText),
    Projections.Property<TextItem>(ti => ti.ItemText)));

var q = Session.QueryOver<TextItem>()
    .Left.JoinQueryOver(ti => ti.TranslatedItems);

评估此 sql 中的 q 结果

coalesce(this_.ItemText, this_.ItemText)

this_ RHS 中需要是一个别名表

我可以使用Projections.Alias(Projections.Property<TranslatedText>(tt => tt.ItemText), "ttAlias")但我不确定如何在 JoinQueryOver 中映射“ttAlias” .

我也可以在那里创建一个别名,但不知道如何命名它。

TranslatedText ttAlias = null;
...
JoinQueryOver(ti => ti.TranslatedItems, () => ttAlias)

最佳答案

别名是 QueryOver 中的变量,就像您在 JoinQueryOver 调用中所示的那样。 QueryOver 中不需要别名(字符串),它们用于 Criteria 查询。

对于问题本身:我现在无法测试它,但我认为这应该可行:

Projections.Property(() => ttAlias.ItemText)

关于NHibernate QueryOver、投影和别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7821393/

相关文章:

wpf - Nhibernate 是否支持 Sybase?

NHibernate 热切加载集合 + 分页

sql - Nhibernate QueryOver 中的嵌套选择

NHibernate QueryOver 与子查询或其他想法如何工作?

在复杂对象图上使用 Queryover API 进行 NHibernate Eager Loading

NHibernate:将子实体投影到父属性中会引发异常

c# - 使用 LINQ 查询加密值

c# - 对判别器值进行投影

c# - NHibernate 拦截器在投影上的使用

c# - Linq 平等比较不起作用