Nhibernate Queryover加入了许多人



我真的用这个nhibernate查询敲打我的头:)写一个加入。我与资产和产品有很多关系。请在表模型下面找到

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>();

任何人都可以帮助如何编写加入查询,以便我想找到所有标题和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()来更改所在的限制的上下文。在http://blog.andrewawhitaker.com/blog/2014/03/16/queryover-series-part-2-basics/上了解更多信息。这应该接近您想要的东西。您声明您正在寻找左加入,但是由于仅在指定产品编号时才应用此处的加入,因此应该没有问题。如果您发现需要。

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>();

最新更新