请考虑这个简化的场景:
两个NHibernate实体:
public class Foo {
public virtual Bar Bar {get; set;}
}
public class Bar {
public virtual string Name {get; set;}
}
我需要用他们的Bar的名字来排序Foo的集合。然而,并非所有Foos都有指定的条形图。对于某些实体,它为null
显而易见:
Foos.OrderBy(f => f.Bar.Name)
引发例外。
我能想到处理它的唯一方法是向Foo添加一个我可以在OrderBy子句中使用的公式。我觉得必须有一个更好,更优雅的解决方案。
有什么想法吗?
此问题已在NHibernate 3.1 - https://nhibernate.jira.com/browse/NH-2412
中修复OrderBy的外部联接是“内置”
答案 0 :(得分:2)
您需要指定一个连接到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&lt; 3.0。您必须使用Criteria或HQL。
答案 1 :(得分:0)
检查Bar是否为空并选择默认字符串值,否则使用Bar.name:
Foos.OrderBy(f => (f.Bar != null)?f.Bar.Name:"")