如何在Nhibernet linq中连接两个表查询和select匹配的记录?
How to join two tables queries and select matching the records in Nhibernet linq?
我正在尝试开发一个查询,它使用 linq-Nhibernet 查询在一个结果中为我提供来自 table 的记录。
我有两个 table 第一个:account (accountId, accountDescription) 和第二个:accountdescriptionhistory (accountId, description)。 AccountId 是对第二个 table 的外键引用。现在,我正在使用以下查询从第一个 table 中获取所有记录。
我想要的是,如果记录存在于 AccountDescriptionHistory 中以供 accountId 参考,那么它应该 return 我的描述来自 AccountDescriptionHistory 而不是来自帐户 table。我想在单个查询中实现这一点。
注意:我在 linq NHibernate 查询中需要这个。
添加 class 详细信息
帐户 class 如下所示:
public class Account : EntityModelHasOwner<Account>, ISupportsIdLookup
{
/// <summary>
/// The account number
/// </summary>
public virtual string AccountNumber { get; set; }
/// <summary>
/// The account's description
/// </summary>
public virtual string Description { get; set; }
}
账户描述class:
public class AccountDescriptionHistory : EntityModel<AccountDescriptionHistory>
{
#region Public Properties
/// <summary>
/// The account description of an account that is valid for a specific date range
/// </summary>
public virtual string AccountDescription { get; set; }
/// <summary>
/// The account this AccountDescriptionHistory is associated with.
/// </summary>
public virtual Account Account { get; set; }
}
您可以通过查询完成此操作。
/* this.Session is a NHibernate.ISession */
string hql = "FROM Account acc" +
" inner join fetch acc.MyAccountDetails"
"where acc.IsDeleted= :myIsDeletedParameter";
IQuery q = this.Session.CreateQuery(hql);
q.SetBoolean("myIsDeletedParameter", false);
IList<Account> returnItems = q.List<Account>();
return returnItems;
或使用 Fluent 风格;
////using NHibernate;
////using NHibernate.Linq;
IQueryable<Account> returnItemsQuery = (from myalias in this.Session.Query<Account>()
.FetchMany(x => x.MyAccountDetails )
.Where(acc => false == acc.IsDeleted)
select myalias);
IList<Account> returnItems = returnItemsQuery.ToList();
我假设你的 poco 看起来像这样。
public class Account
{
/* scalars */
public virtual ICollection<AccountDetails> MyAccountDetails {get; set;}
}
参见:
https://nhibernate.info/doc/howto/various/lazy-loading-eager-loading
我正在尝试开发一个查询,它使用 linq-Nhibernet 查询在一个结果中为我提供来自 table 的记录。
我有两个 table 第一个:account (accountId, accountDescription) 和第二个:accountdescriptionhistory (accountId, description)。 AccountId 是对第二个 table 的外键引用。现在,我正在使用以下查询从第一个 table 中获取所有记录。
我想要的是,如果记录存在于 AccountDescriptionHistory 中以供 accountId 参考,那么它应该 return 我的描述来自 AccountDescriptionHistory 而不是来自帐户 table。我想在单个查询中实现这一点。
注意:我在 linq NHibernate 查询中需要这个。
添加 class 详细信息
帐户 class 如下所示:
public class Account : EntityModelHasOwner<Account>, ISupportsIdLookup
{
/// <summary>
/// The account number
/// </summary>
public virtual string AccountNumber { get; set; }
/// <summary>
/// The account's description
/// </summary>
public virtual string Description { get; set; }
}
账户描述class:
public class AccountDescriptionHistory : EntityModel<AccountDescriptionHistory>
{
#region Public Properties
/// <summary>
/// The account description of an account that is valid for a specific date range
/// </summary>
public virtual string AccountDescription { get; set; }
/// <summary>
/// The account this AccountDescriptionHistory is associated with.
/// </summary>
public virtual Account Account { get; set; }
}
您可以通过查询完成此操作。
/* this.Session is a NHibernate.ISession */
string hql = "FROM Account acc" +
" inner join fetch acc.MyAccountDetails"
"where acc.IsDeleted= :myIsDeletedParameter";
IQuery q = this.Session.CreateQuery(hql);
q.SetBoolean("myIsDeletedParameter", false);
IList<Account> returnItems = q.List<Account>();
return returnItems;
或使用 Fluent 风格;
////using NHibernate;
////using NHibernate.Linq;
IQueryable<Account> returnItemsQuery = (from myalias in this.Session.Query<Account>()
.FetchMany(x => x.MyAccountDetails )
.Where(acc => false == acc.IsDeleted)
select myalias);
IList<Account> returnItems = returnItemsQuery.ToList();
我假设你的 poco 看起来像这样。
public class Account
{
/* scalars */
public virtual ICollection<AccountDetails> MyAccountDetails {get; set;}
}
参见:
https://nhibernate.info/doc/howto/various/lazy-loading-eager-loading