2015-10-20 66 views
2

我有两个通过一对多关系连接的实体。 这样例如:NHibernate Linq Startwith生成外部联接

public class Category 
{ 
    public int Id {get; set; } 
    public string Name {get; set;} 
} 

public class Product 
{ 
    public int Id {get; set;} 
    public string Name {get; set;} 
    public Category ProductCategory {get; set;} 
} 

和映射使用功能NHibernate

public class CategoryMap : ClassMap<Category> 
{ 
.... 
} 

public Class ProductMap: ClassMap<Product> 
{ 
... 
References(x => x.ProductCategory).Column("CategoryId"); 
} 

当我使用LINQ NHibernate的与where子句和相等时,它产生内搜索产品和类别

之间加入

so this

var query = session.Query<Product>() 
    .Where (x => x.ProductCategory.Name == "abc"); 

th是会产生内加入

但是当我做与startwith搜索这样

var query = session.Query<Product>() 
    .Where (x => x.ProductCategory.Name.StartWith("abc")); 

这将产生外两个之间的连接。

为什么,我该如何强制产生内部连接?

+1

'QueryOver'让你选择它们 – Najera

回答

0

您可以使用QueryOver这是另一种在NHibernate中创建查询的方法。在这种情况下,您可以根据需要指定联接类型。

Category category = null; 

var result = session.QueryOver<Product>() 
        .JoinAlias(x => x.ProductCategory,() => category, JoinType.InnerJoin) 
        .Where(Restrictions.Like(Projections.Property(() => category.Name), "abc%", MatchMode.Start)) 
        .List(); 

在另一方面,在查询更加冗长的代码,你必须指定一个很多东西你避免使用linq