C# 如何使用NHibernate CreateCriteria进行可能为空值的联接?

C# 如何使用NHibernate CreateCriteria进行可能为空值的联接?,c#,nhibernate,C#,Nhibernate,NHibernate版本:3.3.1 原始查询如下所示 List<PostInstruction> instructions = PostInstruction.Query( Restrictions.Eq("Campaign", campaign), Restrictions.In("Status", new PostInstructionStatus[] { PostInstructionStatus.Pending,

NHibernate版本:3.3.1

原始查询如下所示

List<PostInstruction> instructions = PostInstruction.Query(
    Restrictions.Eq("Campaign", campaign),
    Restrictions.In("Status", new PostInstructionStatus[] { 
                PostInstructionStatus.Pending, 
                PostInstructionStatus.Finished 
                }),
    Restrictions.Or(
        Restrictions.Gt("DateCreated", DateTime.UtcNow - TimeSpan.FromMinutes(15)),
        Restrictions.IsNotNull("Post")
        )
    );

通过查询,您应该能够执行以下操作:

var instructionsCount = session.QueryOver<PostInstruction>()
    .Select(Projections.Count<PostInstruction>(pi => pi.Id))
    .Where(pi => pi.Campaign == campaign && pi.City == city && (pi.Post == PostStatus.Pending || pi.Post == PostStatus.Live || pi.Post == null)); //Add your other conditions

Console.WriteLine(instructionsCount.SingleOrDefault<int>()); 
var instructionscont=session.QueryOver()
.Select(projects.Count(pi=>pi.Id))
其中(pi=>pi.Campaign==Campaign&&pi.City==City&(pi.Post==PostStatus.Pending | | pi.Post==PostStatus.Live | | pi.Post==null))//添加其他条件
Console.WriteLine(指令计数.SingleOrDefault());

您正在运行哪个版本的nHibernate。。。出于好奇:为什么在每次查询之前都要启动一个事务?使用3.3.1,因为我只是复制粘贴代码以使其运行,同时我尝试在一个查询中找出如何执行它。我下面的答案对您有帮助吗?
var instructionsCount = session.QueryOver<PostInstruction>()
    .Select(Projections.Count<PostInstruction>(pi => pi.Id))
    .Where(pi => pi.Campaign == campaign && pi.City == city && (pi.Post == PostStatus.Pending || pi.Post == PostStatus.Live || pi.Post == null)); //Add your other conditions

Console.WriteLine(instructionsCount.SingleOrDefault<int>());