NHibernate的Linq,根据可为空的关联的属性排序

问题描述

| 请考虑以下简化方案: 两个NHibernate实体:
public class Foo {
  public virtual Bar Bar {get; set;}
}

public class Bar {
  public virtual string Name {get; set;}
}
我需要按他们的酒吧名称对Foo的集合进行排序。但是,并非所有的Foos都分配了Bar。对于某些实体,它为null 显而易见的是:
Foos.OrderBy(f => f.Bar.Name)
引发异常。 我能想到的唯一方法是在Foo中添加一个可以在OrderBy子句中使用的公式。我觉得必须有一个更好,更优雅的解决方案。 有任何想法吗? 更新资料 NHibernate 3.1中已解决此问题-https://nhibernate.jira.com/browse/NH-2412 OrderBy的外部联接为\“ Built In \”     

解决方法

您需要指定到Bar的连接 如果您使用的是NHibernate> = 3.0。
from foo in session.Query<Foo>()
join bar in session.Query<Bar>() on foo.Bar.Id equals bar.Id into leftJoinFooBar
from bars in leftJoinFooBar.DefaultIfEmpty()
orderby bars.Name
select foo
如果您正在使用NHibernate <3.0。您必须使用“标准”或HQL。     ,检查Bar是否为null,如果不是,则选择默认字符串值,否则使用Bar.name:
Foos.OrderBy(f => (f.Bar != null)?f.Bar.Name:\"\")
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...