nHibernate, ИЛИ предложение с .withSubquery - PullRequest
2 голосов
/ 13 марта 2012

Как заставить nHibernate генерировать предложение «ИЛИ» вместо предложения «И» при использовании «.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');  

Я ищу условие «ИЛИ» между подзапросами.

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 Ответ

1 голос
/ 13 марта 2012
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);

SideNote: TemplateIsActive должно быть / bool no?

...