Fluent Nhibernate where 子句一对多

Fluent Nhibernate where clause one to many

我想在一对多实体之间创建联合查询。正如我上面举的例子;

用户实体

    public class UserEntity
    {
      public virtual int Id {get;set;}
      public virtual IList<Card> Cards{get;set;}

    }

和 CardEntity

    public class CardEntity
    {
      public virtual int Id {get;set;}
      public virtual int CardNumber {get;set;}
      public virtual UserEntity User{get;set;}
    }

用户映射

    public UserEntityMap()
    {
        Table("user");
        Id(x => x.Id);
        HasMany(x => x.Cards).KeyColumn("User_Id").Fetch().Join();

    }

卡片映射

    public CardEntityMap()
    {
        Table("card");
        Id(x => x.Id);
        Map(x => x.CardNumber);
        References(x => x.User).Column("User_id");
    }

查询

 var query = _session.QueryOver<UserEntity>();
 if(!string.IsNullOrEmpty(cardNumber)
 {
   query.Where(x=>x.Cards.Any(c=>c.CardNumber == cardNumber)) /// Tried this get an error  
 }

我希望看到像

这样的输出
Select * from user u join card c on c.user_id=u.id where c.number=cardNumber 

我知道必须有一个合乎逻辑的方法来做到这一点,但我找不到。谢谢你的帮助。

您是否尝试过使用 NHibernate.Linq 而不是 QueryOver?

如果你在文件的顶部放一个 'using NHibernate.Linq',你就可以使用

_session.Query<UserEntity>();

相反,这可能会给您想要的结果。

或者(使用 QueryOver),您可能希望使用 JoinAlias:

Card card; // Used for alias below

query.JoinAlias(u => u.Cards, () => card)
     .Where(() => card.CardNumber == cardNumber)