Linq for NHibernate,按可为空关联的属性排序
请考虑这个简化的场景:
两个 NHibernate 实体:
public class Foo {
public virtual Bar Bar {get; set;}
}
public class Bar {
public virtual string Name {get; set;}
}
我需要按 Foo 的 Bar 名称对 Foo 集合进行排序。然而,并非所有 Foo 都分配了 Bar。对于某些实体,它是 null
显而易见:
Foos.OrderBy(f => f.Bar.Name)
抛出异常。
我能想到的处理它的唯一方法是向 Foo 添加一个可以在 OrderBy 子句中使用的公式。我有一种感觉,必须有一个更好、更优雅的解决方案。
有什么想法吗?
更新
此问题已在 NHibernate 3.1 中修复 - https://nhibernate.jira.com/browse/NH -2412
OrderBy 的外部连接是“内置的”
Kindly consider this simplified scenario:
Two NHibernate Entities:
public class Foo {
public virtual Bar Bar {get; set;}
}
public class Bar {
public virtual string Name {get; set;}
}
I need to sort a collection of Foo by their's Bar's name. however, not all Foos have Bars assigned. For some entities it is null
The obvious:
Foos.OrderBy(f => f.Bar.Name)
Throws an Exception.
The only way I can think of to handle it is to add a formula to Foo that I can use in the OrderBy clause. I have a feeling that there got to be a better and more elegant solution.
Any ideas?
Update
This issue is fixed in NHibernate 3.1 - https://nhibernate.jira.com/browse/NH-2412
The outer join for the OrderBy is "Built In"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
需要指定与 Bar 的连接
如果您使用 NHibernate >=3.0,则
。如果您/正在使用 NHibernate <3.0。您必须使用 Criteria 或 HQL。
You need to specify a join to Bar
If you're using NHibernate >=3.0.
if you/re using NHibernate <3.0. You'll have to use Criteria or HQL.
检查 Bar 是否为空,如果为空则选择默认字符串值,否则使用 Bar.name:
Check if Bar is null and pick a default string value if it is otherwise use Bar.name: