Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于列差异过滤的NHibernate查询_C#_Asp.net_Nhibernate - Fatal编程技术网

C# 基于列差异过滤的NHibernate查询

C# 基于列差异过滤的NHibernate查询,c#,asp.net,nhibernate,C#,Asp.net,Nhibernate,以下是约会模型的快照: public class Appointment { public virtual DateTime? InTime {get; set;} public virtual DateTime? OutTime {get; set;} } 我想要所有持续时间少于2分钟的约会。比如: var twoMinutes = new TimeSpan(0, 0, 2, 0); var query = Repository.QueryOver&l

以下是约会模型的快照:

public class Appointment
{
    public virtual DateTime? InTime {get; set;}
    public virtual DateTime? OutTime {get; set;}
}
我想要所有持续时间少于2分钟的约会。比如:

var twoMinutes = new TimeSpan(0, 0, 2, 0);
var query =
            Repository.QueryOver<DomainModel.Models.Appointment>()
                .Where(a => a.OutTime.Value - a.InTime.Value < twoMinutes);
return query.List();
例外情况:

从作用域引用了类型为“DomainModel.Models.Appointment”的变量“a”,但未定义该变量

当我尝试使用QueryOver查询时,我得到了一个错误。我如何在nHibernate中使用ICriteria或任何其他方法来实现这一点?

正如我在评论中提到的,这里的解决方案是将该比较移到DB中。据我所知,这应该通过投影来实现:

// two minutes
var twoMinutes = 2d;

// the query
var query = Repository.QueryOver<DomainModel.Models.Appointment>();

// the projection using DATEDIFF
var projection = Projections
    .SqlProjection("DATEDIFF(mi, {alias}.InTime ,{alias}.outTime) as difference"
               , new[] {"difference"}
               , new[] {NHibernateUtil.Double});
检查

DATEDIFFdatepart、startdate、enddate

这意味着要获得正数,第一个arg必须更老


注意:有些东西被QueryOver引擎正确地转换为适当的SQL,但这一个不是…

有server C生命时刻,也有DB生命时刻。差分的计算是必须在DB上进行的。所以创建一个投影,计算DB上的结果。。。与从服务器传递的param进行比较所以你说的是-这必须在两个查询中完成-一个是获取超时和及时之间的差异,另一个是传递差异并与两分钟进行比较?@mridula这听起来一点都不正确。如果你回答了上面Liath的问题,你会得到更多的帮助。我已经编辑了这个问题,添加了我得到的错误。
query.Where(Restrictions.Ge(projection, twoMinutes));