NHibernate queryover 加入多对多
NHibernate queryover join many to many
我真的很想用这个 NHibernate 查询 :) 来写一个连接。
我与资产和产品有很多关系。请在下面找到 table 模型
public class Asset
{
string Id { get; set; }
List<Product> Products { get; set; }
}
public class Product
{
string Id { get; set; }
List<Asset> Assets { get; set; }
}
这是我尝试使用 QueryOver
的代码
Product productAlias = null;
Asset assetAlias = null;
var query = Session.QueryOver<Asset>(()=>assetAlias);
if (!string.IsNullOrEmpty(title))
query.WhereRestrictionOn(x => x.Title).IsLike(title, MatchMode.Anywhere);
if (!string.IsNullOrEmpty(productNumber))
{
query.WhereRestrictionOn(asset => asset.Products.First().Id).Equals(productNumber);
}
var result = query.List<Asset>();
任何人都可以帮助如何编写连接查询,以便我想找到所有标题为 title 且 productnumber 等于 productnumber 的资产?
我没有得到上面代码的结果。
The sql query i am trying to achieve is :
select a.* from Asset a ,
ManyToManyTable b on a.mat_id=b.mat_id
where a.title like '%test%' and b.prod_no='212300733'
谢谢
您需要使用 .JoinQueryOver()
来更改您放置 WHERE 限制的上下文。在 http://blog.andrewawhitaker.com/blog/2014/03/16/queryover-series-part-2-basics/ 了解更多信息。这应该接近您要查找的内容。您声明您正在寻找左连接,但由于此处的连接仅在指定产品编号时应用,因此应该没有问题。如果您发现需要,可以申请 .Left.JoinQueryOver()。
var query = Session.QueryOver<Asset>();
if (!string.IsNullOrEmpty(title))
query = query.WhereRestrictionOn(x => x.Title).IsLike(title, MatchMode.Anywhere);
if (!string.IsNullOrEmpty(productNumber))
{
query = query.JoinQueryOver(a => a.Products).Where(p => p.Id == productNumber);
}
var result = query.List<Asset>();
我真的很想用这个 NHibernate 查询 :) 来写一个连接。 我与资产和产品有很多关系。请在下面找到 table 模型
public class Asset
{
string Id { get; set; }
List<Product> Products { get; set; }
}
public class Product
{
string Id { get; set; }
List<Asset> Assets { get; set; }
}
这是我尝试使用 QueryOver
的代码Product productAlias = null;
Asset assetAlias = null;
var query = Session.QueryOver<Asset>(()=>assetAlias);
if (!string.IsNullOrEmpty(title))
query.WhereRestrictionOn(x => x.Title).IsLike(title, MatchMode.Anywhere);
if (!string.IsNullOrEmpty(productNumber))
{
query.WhereRestrictionOn(asset => asset.Products.First().Id).Equals(productNumber);
}
var result = query.List<Asset>();
任何人都可以帮助如何编写连接查询,以便我想找到所有标题为 title 且 productnumber 等于 productnumber 的资产?
我没有得到上面代码的结果。
The sql query i am trying to achieve is :
select a.* from Asset a ,
ManyToManyTable b on a.mat_id=b.mat_id
where a.title like '%test%' and b.prod_no='212300733'
谢谢
您需要使用 .JoinQueryOver()
来更改您放置 WHERE 限制的上下文。在 http://blog.andrewawhitaker.com/blog/2014/03/16/queryover-series-part-2-basics/ 了解更多信息。这应该接近您要查找的内容。您声明您正在寻找左连接,但由于此处的连接仅在指定产品编号时应用,因此应该没有问题。如果您发现需要,可以申请 .Left.JoinQueryOver()。
var query = Session.QueryOver<Asset>();
if (!string.IsNullOrEmpty(title))
query = query.WhereRestrictionOn(x => x.Title).IsLike(title, MatchMode.Anywhere);
if (!string.IsNullOrEmpty(productNumber))
{
query = query.JoinQueryOver(a => a.Products).Where(p => p.Id == productNumber);
}
var result = query.List<Asset>();