gpt4 book ai didi

linq - nHibernate 3 - Left Join re-Linq 解决方案

转载 作者:行者123 更新时间:2023-12-04 02:13:35 27 4
gpt4 key购买 nike

我正在尝试使用 nHibernate 3 在下面运行这个 Linq 查询。

var items = from c in session.Query<tbla>()
join t in session.Query<tblb>() on c.Id equals t.SomeId into t1 // use left join on trades.
from t2 in t1.DefaultIfEmpty()
select new {item = c, desc = t2.Description};

据我所知,这是在 linq 中执行左连接的常用方法。但是,它给了我一条不受支持的异常消息。如何在不求助于 HQL 的情况下实现基本的左连接?像 nHibernate 这样流行的 ORM 不能支持像左连接这样行人的东西,这似乎有些愚蠢。

[编辑]

我在下面给出了我自己问题的真正答案。

最佳答案

对此进行进一步研究后;这可以(虽然不明显)使用 QueryOver 以强类型方式实现.诀窍是将外部查询别名变量与 WithAlias 和 TransformUsing 结合使用。这是一个使用过滤和排序进行左连接的示例。

// Query alias variables 
entityTypeA anchorType = null;
entityTypeB joinedType = null;

var items = session.Query<entityTypeA>( ()=>anchorType )
.Left.JoinAlias(() => anchorType.FieldName, () => joinedType)
.WithSubquery.WhereProperty(e => e.FieldD).In(myFilterList)
// bind property mappings using WithAlias
.SelectList(list => list
.Select(e => e.FieldNameA).WithAlias( ()=> anchorType.FieldNameA )
.Select(e => e.FieldNameB).WithAlias( ()=> anchorType.FieldNameB )
)
.OrderBy(e => joinedType.FieldNameC).Desc
.TransformUsing(Transformers.AliasToBean<entityTypeA>()) // transform result to desired type.
.List<entityTypeA>();

关于linq - nHibernate 3 - Left Join re-Linq 解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4708029/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com