2012-03-13 23 views
2

我們如何可以強制使用NHibernate的「.withSubquery」時產生「OR」的規定,而不是「與」條款NHibernate的,OR子句.withSubquery

var includeSharedTemplateCategories= EntityFinder.Of<TemplateMappers.FolderEntity>()  .Where(e => e.MID == effectiveMemberID) .Where(e => e.CategoryType == "shared_template") .SelectList(e => e.Select(c => c.Id)); 

var includeNormalCategories = EntityFinder.Of<TemplateMappers.FolderEntity>() 
.Where(e => e.MID == MemberID) 
.Where(e => e.CategoryType == "template") 
.SelectList(e => e.Select(c => c.Id)); 

var query = EntityFinder.Of<TemplateMappers.TemplateEntity>() 
.Where(f => f.TemplateIsActive == 1) 
.RestrictionByQuery<TemplateMappers.TemplateEntity, TemplateObject>(options) 
.WithSubquery.WhereProperty(e => e.CategoryId).In(includeSharedTemplateCategories) 
.WithSubquery.WhereProperty(e => e.CategoryId).In(includeNormalCategories) 
.SelectByQuery<TemplateMappers.TemplateEntity, TemplateObject>(options) 
.OrderByQuery<TemplateMappers.TemplateEntity, TemplateObject>(options); 

「和」條件

使用
this_.fkcategoryid IN (SELECT this_0_.pkcategoryid AS y0_ 
FROM categories this_0_ 
WHERE this_0_.mid = xyz AND this_0_.categorytype = 's_template') 
And this_.fkcategoryid IN (SELECT this_0_.pkcategoryid AS y0_ FROM categories this_0_ 
WHERE this_0_.mid = abc AND this_0_.categorytype = 'template'); 

我正在尋找子查詢之間的「OR」子句。

this_.fkcategoryid IN (SELECT this_0_.pkcategoryid AS y0_           FROM categories this_0_ WHERE this_0_.mid = xyz AND this_0_.categorytype = 's_template') 
**OR** this_.fkcategoryid IN (SELECT this_0_.pkcategoryid AS y0_ FROM dbo.tblcategories this_0_ WHERE this_0_.mid = abc AND this_0_.categorytype = 'template'); 

kris。

回答

1
var includeSharedAndNormalTemplateCategories = EntityFinder.Of<FolderEntity>() 
     .Where(e => (e.MID == effectiveMemberID && e.CategoryType == "shared_template") || 
        (e.MID == MemberID && e.CategoryType == "template")) 
     .Select(e => e.Id); 

var query = EntityFinder.Of<TemplateEntity>() 
    .Where(f => f.TemplateIsActive) 
    .RestrictionByQuery<TemplateEntity, TemplateObject>(options) 
    .WithSubquery.WhereProperty(e => e.CategoryId).In(includeSharedAndNormalTemplateCategories) 
    .SelectByQuery<TemplateEntity, TemplateObject>(options) 
    .OrderByQuery<TemplateEntity, TemplateObject>(options); 

附註:TemplateIsActive應該是/ bool不是?

+0

感謝它爲我工作。活動標誌是int 在我們的系統中。 Thx – KBG 2012-03-13 23:14:31

相關問題