【问题标题】:How can I convert HQL inner join to LINQ join如何将 HQL 内部联接转换为 LINQ 联接
【发布时间】:2013-02-17 20:55:33
【问题描述】:

如何在 Linq 中编写此 HQL:

select a from A a
join a.childrenList b
where b = 1

childrenList 是一个未按类型映射到数据库的枚举列表,而是 而是与其整数值一起保存。

这个 HQL 工作正常,但我想用 Linq 编写它。 我写不出可以编译的东西。

【问题讨论】:

  • 尤其是for germans ;)
  • 我不知道 NH 或 HQL,但我有一种奇怪的感觉:session.Query<A>().Where(a => a.childrenList.Any(b => b.c == 1));
  • 如果 b 是一个枚举,什么是 b.c ?您应该发布您的具体类/类型,其中包含映射而不是映射
  • @w0lf:谢谢。你的建议有效。我写了我的查询如下。 from A a in db.Query<A>() where a.childrenList.Any(b => b == (B) 1) select a
  • @jbl:我犯了一个错误。我想问一下我的一般问题。

标签: c# linq nhibernate join hql


【解决方案1】:

我觉得你可以的

var results = 
    from a in db.Query<A>() 
    where a.childrenList.Any(b => b == (B)1)
    select a;

或者,使用链式方法:

var results = db.Query<A>().Where(a => a.childrenList.Any(b => b == (B)1));

关于我们上面的 cmets,我认为您可以删除 from A a in ... select a 语句,因为它们是多余的。

【讨论】:

  • from A a 是必需的,因为 a.childrenList 中的 a 绑定到它。此 Linq 查询有效,但它被转换为 where exists... 查询而不是 join 查询。
  • @S.M.Amin 是的,抱歉,我在编写那个版本时没有给予足够的关注。我的意思是,如果使用链式 LINQ 方法,则不需要 from/select。我已经更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
相关资源
最近更新 更多