我需要一个带有OR析取的查询,并且可以为空的表连接。
我想搜索具有“DscData”或至少有一个“Dsc”类型的“注释”的“条目”。
数据库看起来像这样。
CREATE TABLE LogbookDscData
(
[Id] INTEGER PRIMARY KEY,
);
CREATE TABLE LogbookEntry
(
[Id] INTEGER PRIMARY KEY,
FOREIGN KEY (DscDataId) REFERENCES LogbookDscData(Id)
);
CREATE TABLE LogbookComment
(
[Id] INTEGER PRIMARY KEY,
[Type] TINYINT NOT NULL,
FOREIGN KEY ([EntryId]) REFERENCES LogbookEntry(Id)
);
条目可以有0-N条评论。 一个条目可以有DscData。
到目前为止我的代码:
IQueryOver<Entry, Entry> query
Comment comment = null;
query.JoinAlias(x => x.Comments, () => comment);
var disjunction = new Disjunction();
disjunction.Add(Restrictions.Where<Entry>(x => x.DscData != null));
disjunction.Add(Restrictions.On(() => comment.Type).IsLike(CommentType.Dsc));
query.And(disjunction);
问题是当没有与Entry相关的注释时,此代码不起作用。 我希望条目匹配,如果他们有DscData或者他们至少有一个类型为DSC的评论。
我在this帖子中找到了一个非常有用的答案,但它并没有解决我的问题。