查询其中id不在列表中
问题描述:
我一直在为此苦苦挣扎,所以希望QueryOver的一些专家能够提供帮助。查询其中id不在列表中
我有一个博客文章列表。您可以对每篇博文进行投票,我希望(除其他外)收到用户未投票的帖子列表。
首先,我想这样做是这样的:
Session.QueryOver<BlogPost>()
.WhereRestrictionOn(bp => bp.Id)
.NotIn(existingBlogPostVotes);
(existingBlogPostVoteIds是投票的相关博客文章的ID)
但是,这并不在QueryOver框架存在。
我发现我能做到这一点在这样的标准:
var crit =
Session.CreateCriteria<BlogPost>()
.Add(Restrictions.Not(Restrictions.In("Id",existingBlogPostVotes)));
但我会做到这一点的QueryOver,而不是标准。
这将如何在QueryOver中完成?
答
如何Not.IsIn()
:
Session.QueryOver<BlogPost>()
.WhereRestrictionOn(bp => bp.Id)
.Not.IsIn(existingBlogPostVotes);
任选地,这可以在完成Linq提供者以及:
Session.Query<BlogPost>()
.Where(bp => !existingBlogPostVotes.Contains(bp.Id));
答
如何在where子句中使用子查询的标准查询呢?我没有视觉工作室在我面前验证语法,但实质上这是查询所有博客帖子,其中不存在当前用户的blogPostVote记录。
Session.QueryOver<BlogPost>()
.Where(bp => bp.Id)
.Where(
!Session.QueryOver<BlogPostVotes>()
.Where(blogPostVotes => blogPostVotes.BlogPostId == bp.Id)
.Where(blogPostVotes => blogPostVotes.UserId == currentUserId)
.Any());
这应该给你你想要的结果。我知道我的语法将在工作的Linq To Sql的,如果它不为NHibernate的工作,看看这个答案在这里(Subqueries with QueryOver)
感谢这正是我正在寻找。 – Dofs 2012-02-27 18:39:26