2015-10-20 30 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