首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NHibernate join + coalesce

NHibernate join + coalesce
EN

Stack Overflow用户
提问于 2012-10-16 22:39:45
回答 2查看 654关注 0票数 1

这是实际模式的简化示例,所以请耐心听我说。我有一个包含idvalue列的表foo。还有一个bar表,它有一个FK返回到foo表,这个表有一个extended_value列。我想让Foo的类映射向左加入栏,并尝试使用它的extended_value列(如果存在的话),否则返回到Foo的value

下面是我需要的SQL等价物:

代码语言:javascript
运行
复制
select coalesce(b.extended_value, f.value) as value
  from foo f
  left join bar b on (b.id = f.id)

我在NHibernate上使用了Fluent。这是我一直在尝试使用的:

代码语言:javascript
运行
复制
Join("bar", m =>
{
    m.Optional();
    m.KeyColumn("id");
    m.Map(foo => foo.Value).Formula("COALESCE(extended_value, value)");
});

但是这是失败的,因为生成的SQL期望extended_valuevalue都在同一个表上。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-17 02:50:58

我的建议是在映射中使用,而不是

独立映射foo.valuebar.extended_value,然后在查询中使用coalesce和/或创建使用??运算符的未映射属性。

票数 3
EN

Stack Overflow用户

发布于 2012-10-25 16:52:18

我会使用Diego Mijelshon的建议,但下面的建议也应该有效

代码语言:javascript
运行
复制
// FooMap
Map(foo => foo.Value).Formula("COALESCE((select b.extended_value from bar b WHERE b.id = id), value)");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12917245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档