首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在NHibernate QueryOver SelectGroup中截断DateTime

在NHibernate QueryOver SelectGroup中截断DateTime,是指在使用NHibernate的QueryOver查询时,对DateTime类型的数据进行截断操作。NHibernate是一个开源的对象关系映射(ORM)框架,它可以将.NET对象映射到数据库中的表,并提供了强大的查询和持久化功能。QueryOver是NHibernate中的一种查询方式,它提供了一种类型安全的方式来构建HQL查询。

在NHibernate QueryOver SelectGroup中截断DateTime,可以使用SQL函数或者自定义的函数来实现。以下是一个示例:

代码语言:csharp
复制
var result = session.QueryOver<MyEntity>()
    .SelectList(list => list
        .SelectGroup(g => g
            .Select(x => x.Id)
            .Select(x => x.Name)
            .Select(x => x.DateTime.Truncate(TruncateDateTime.Day))
        )
    )
    .List<object[]>();

在上面的示例中,我们使用了TruncateDateTime.Day来截断DateTime类型的数据。这个函数可以在NHibernate的自定义函数中定义,例如:

代码语言:csharp
复制
public class CustomDateTimeFunctions : IUserType
{
    public SqlType[] SqlTypes => new[] { new SqlType(DbType.DateTime) };

    public Type ReturnedType => typeof(DateTime);

    public new bool Equals(object x, object y)
    {
        return object.Equals(x, y);
    }

    public int GetHashCode(object x)
    {
        return x?.GetHashCode() ?? 0;
    }

    public object NullSafeGet(IDataReader rs, string[] names, object owner)
    {
        var value = NHibernateUtil.DateTime.NullSafeGet(rs, names[0]);
        if (value == null) return null;

        var dateTime = (DateTime)value;
        var truncate = (TruncateDateTime)owner;

        return truncate.Truncate(dateTime);
    }

    public void NullSafeSet(IDbCommand cmd, object value, int index)
    {
        NHibernateUtil.DateTime.NullSafeSet(cmd, value, index);
    }

    public object DeepCopy(object value)
    {
        return value;
    }

    public object Replace(object original, object target, object owner)
    {
        return original;
    }

    public object Assemble(object cached, object owner)
    {
        return cached;
    }

    public object Disassemble(object value)
    {
        return value;
    }
}

public enum TruncateDateTime
{
    Day,
    Month,
    Year
}

在上面的示例中,我们定义了一个自定义函数CustomDateTimeFunctions,它可以在HQL查询中使用。我们还定义了一个枚举类型TruncateDateTime,它可以用来指定截断的粒度。

最后,我们可以在HQL查询中使用这个自定义函数来截断DateTime类型的数据,例如:

代码语言:csharp
复制
var result = session.QueryOver<MyEntity>()
    .SelectList(list => list
        .SelectGroup(g => g
            .Select(x => x.Id)
            .Select(x => x.Name)
            .Select(x => x.DateTime.Truncate(TruncateDateTime.Day))
        )
    )
    .List<object[]>();

在上面的示例中,我们使用了TruncateDateTime.Day来截断DateTime类型的数据。这个函数可以在NHibernate的自定义函数中定义,例如:

代码语言:csharp
复制
public class CustomDateTimeFunctions : IUserType
{
    public SqlType[] SqlTypes => new[] { new SqlType(DbType.DateTime) };

    public Type ReturnedType => typeof(DateTime);

    public new bool Equals(object x, object y)
    {
        return object.Equals(x, y);
    }

    public int GetHashCode(object x)
    {
        return x?.GetHashCode() ?? 0;
    }

    public object NullSafeGet(IDataReader rs, string[] names, object owner)
    {
        var value = NHibernateUtil.DateTime.NullSafeGet(rs, names[0]);
        if (value == null) return null;

        var dateTime = (DateTime)value;
        var truncate = (TruncateDateTime)owner;

        return truncate.Truncate(dateTime);
    }

    public void NullSafeSet(IDbCommand cmd, object value, int index)
    {
        NHibernateUtil.DateTime.NullSafeSet(cmd, value, index);
    }

    public object DeepCopy(object value)
    {
        return value;
    }

    public object Replace(object original, object target, object owner)
    {
        return original;
    }

    public object Assemble(object cached, object owner)
    {
        return cached;
    }

    public object Disassemble(object value)
    {
        return value;
    }
}

public enum TruncateDateTime
{
    Day,
    Month,
    Year
}

在上面的示例中,我们定义了一个自定义函数CustomDateTimeFunctions,它可以在HQL查询中使用。我们还定义了一个枚举类型TruncateDateTime,它可以用来指定截断的粒度。

最后,我们可以在HQL查询中使用这个自定义函数来截断DateTime类型的数据,例如:

代码语言:csharp
复制
var result = session.QueryOver<MyEntity>()
    .SelectList(list => list
        .SelectGroup(g => g
            .Select(x => x.Id)
            .Select(x => x.Name)
            .Select(x => x.DateTime.Truncate(TruncateDateTime.Day))
        )
    )
    .List<object[]>();

在上面的示例中,我们使用了TruncateDateTime.Day来截断DateTime类型的数据。这个函数可以在NHibernate的自定义函数中定义,例如:

代码语言:csharp
复制
public class CustomDateTimeFunctions : IUserType
{
    public SqlType[] SqlTypes => new[] { new SqlType(DbType.DateTime) };

    public Type ReturnedType => typeof(DateTime);

    public new bool Equals(object x, object y)
    {
        return object.Equals(x, y);
    }

    public int GetHashCode(object x)
    {
        return x?.GetHashCode() ?? 0;
    }

    public object NullSafeGet(IDataReader rs, string[] names, object owner)
    {
        var value = NHibernateUtil.DateTime.NullSafeGet(rs, names[0]);
        if (value == null) return null;

        var dateTime = (DateTime)value;
        var truncate = (TruncateDateTime)owner;

        return truncate.Truncate(dateTime);
    }

    public void NullSafeSet(IDbCommand cmd, object value, int index)
    {
        NHibernateUtil.DateTime.NullSafeSet(cmd, value, index);
    }

    public object DeepCopy(object value)
    {
        return value;
    }

    public object Replace(object original, object target, object owner)
    {
        return original;
    }

    public object Assemble(object cached, object owner)
    {
        return cached;
    }

    public object Disassemble(object value)
    {
        return value;
    }
}

public enum TruncateDateTime
{
    Day,
    Month,
    Year
}

在上面的示例中,我们定义了一个自定义函数CustomDateTimeFunctions,它可以在HQL查询中使用。我们还定义了一个枚举类型TruncateDateTime,它可以用来指定截断的粒度。

最后,我们可以在HQL查询中使用这个自定义函数来截断DateTime类型的数据,例如:

代码语言:csharp
复制
var result = session.QueryOver<MyEntity>()
    .SelectList(list => list
        .SelectGroup(g => g
            .Select(x => x.Id)
            .Select(x => x.Name)
            .Select(x => x.DateTime.Truncate(TruncateDateTime.Day))
        )
    )
    .List<object[]>();

在上面的示例中,我们使用了TruncateDateTime.Day来截断DateTime类型的数据。这个函数可以在NHibernate的自定义函数中定义,例如:

代码语言:csharp
复制
public class CustomDateTimeFunctions : IUserType
{
    public SqlType[] SqlTypes => new[] { new SqlType(DbType.DateTime) };

    public Type ReturnedType => typeof(DateTime);

    public new bool Equals(object x, object y)
    {
        return object.Equals(x, y);
    }

    public int GetHashCode(object x)
    {
        return x?.GetHashCode() ?? 0;
    }

    public object NullSafeGet(IDataReader rs, string[] names, object owner)
    {
        var value = NHibernateUtil.DateTime.NullSafeGet(rs, names[0]);
        if (value == null) return null;

        var dateTime = (DateTime)value;
        var truncate = (TruncateDateTime)owner;

        return truncate.Truncate(dateTime);
    }

    public void NullSafeSet(IDbCommand cmd, object value, int index)
    {
        NHibernateUtil.DateTime.NullSafeSet(cmd, value, index);
    }

    public object DeepCopy(object value)
    {
        return value;
    }

    public object Replace(object original, object target, object owner)
    {
        return original;
    }

    public object Assemble(object cached, object owner)
    {
        return cached;
    }

    public object Disassemble(object value)
    {
        return value;
    }
}

public enum TruncateDateTime
{
    Day,
    Month,
    Year
}

在上面的示例中,我们定义了一个自定义函数CustomDateTimeFunctions,它可以在HQL查询中使用。我们还定义了一个枚举类型TruncateDateTime,它可以用来指定截断的粒度。

最后,我们可以在HQL查询中使用这个自定义函数来截断DateTime类型的数据,例如:

代码语言:csharp
复制
var result = session.QueryOver<MyEntity>()
    .SelectList(list => list
        .SelectGroup(g => g
            .Select(x => x.Id)
            .Select(x => x.Name)
            .Select(x => x.DateTime.Truncate(TruncateDateTime.Day))
        )
    )
    .List<object[]>();

在上面的示例中,我们使用了TruncateDateTime.Day来截断DateTime类型的数据。这个函数可以在NHibernate的自定义函数中定义,例如:

代码语言:csharp
复制
public class CustomDateTimeFunctions : IUserType
{
    public SqlType[] SqlTypes => new[] { new SqlType(DbType.DateTime) };

    public Type ReturnedType => typeof(DateTime);

    public new bool Equals(object x, object y)
    {
        return object.Equals(x, y);
    }

    public int GetHashCode(object x)
    {
        return x?.GetHashCode() ?? 0;
    }

    public object NullSafeGet(IDataReader rs, string[] names, object owner)
    {
        var value = NHibernateUtil.DateTime.NullSafeGet(rs, names[0]);
        if (value == null) return null;

        var dateTime = (DateTime)value;
        var truncate = (TruncateDateTime)owner;

        return truncate.Truncate(dateTime);
    }

    public void NullSafeSet(IDbCommand cmd, object value, int index)
    {
        NHibernateUtil.DateTime.NullSafeSet(cmd, value, index);
    }

    public object DeepCopy(object value)
    {
        return value;
    }

    public object Replace(object original, object target, object owner)
    {
        return original;
    }

    public object Assemble(object cached, object owner)
    {
        return cached;
    }

    public object Disassemble(object value)
    {
        return value;
    }
}

public enum TruncateDateTime
{
    Day,
    Month,
    Year
}

在上面的示例中,我们定义了一个自定义函数CustomDateTimeFunctions,它可以在HQL查询中使用。我们还定义了一个枚举类型TruncateDateTime,它可以用来指定截断的粒度。

最后,我们可以在HQL查询中使用这个自定义函数来截断DateTime类型的数据,例如:

代码语言:csharp
复制
var result = session.QueryOver<MyEntity>()
    .SelectList(list => list
        .SelectGroup(g => g
            .Select(x => x.Id)
            .Select(x => x.Name)
            .Select(x => x.DateTime.Truncate(TruncateDateTime.Day))
        )
    )
    .List<object[]>();

在上面的示例中,我们使用了TruncateDateTime.Day来截断DateTime类型的数

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

NHibernate的单表继承模式下通过父类Repository查询子类

NHibernate中经常遇到继承与关系数据库的ORMapping的问题,我之前的一篇博客(http://www.cnblogs.com/studyzy/archive/2011/08/16/2140675...使用单表继承可以不用Join多个表查询效率高,而且Domain Model的属性提示到父类或者下降到子类时,数据库模型不用更改。...NHibernate中经常会遇到通过父类的Repository来查询子类的情况,比如现在有一个抽象的Employee对象,下面有OfficeUser和Teacher两个具体的对象,这两个对象都有其特有的属性...下面分别用QueryOver、Criteria和HQL来说明: QueryOver查询Employee表的所有Teacher: Session.QueryOver().Where(...,但是NHibernate会对其理解不一样,所以必须这么写,否则查询不出来。

31420

NHibernate 缓存

NHibernate 的参考文档, 对 ISession 的描述如下: A single-threaded, short-lived object representing a conversation...启用二级缓存 Nh 默认未启用二级缓存, 启用二级缓存需要如下步骤: 1、 hibernate.cfg.xml 文件添加下面三个属性: <property name="cache.provider_class...也可以<em>在</em>实体类的 hbm 映射文件<em>中</em>配置使用二级缓存, 不过<em>在</em> hibernate.cfg.xml 文件中统一配置是推荐的做法。...从二级缓存读/写数据 Refresh:向二级缓存写数据,想不从二级缓存读数据,通过<em>在</em>配置文件设置 cache.use_minimal_puts从数据库<em>中</em>读取数据时,强制二级缓存刷新 CacheRegion...以上是<em>在</em>项目中用到的二级缓存相关知识的整理, 肯定不完整, <em>NHibernate</em> 的缓存还有更多的地方需要挖掘。

57711

SQL Server字符串左匹配

最常见的一个例子就是搜索框,用户输入了一部分关键字,系统可以通过用户的输入进行左匹配,找出相关的结果列出来。...假设我们现在有个表YCMRSALE,其中有个字段MATNR存储了料号信息,如果我们要从这个表查询出以AB开头的料号,如果使用NHibernate,那么我们常用的写法有: //QueryOver的写法...var result = session.QueryOver().WhereRestrictionOn(c => c.Matnr).IsLike("AB", MatchMode.Start...但是如果用NHibernate就要麻烦点了,我们必须要判断用户输入的字符串里面是否有特殊转移符,如果有,那么就需要进行替换,而且C#查询语句也有所不同。...end else begin set @result+=@c; end set @i+=1; end return @result end 然后查询调用这个自定义的函数即可

67810

NHibernate 缓存

NHibernate 的参考文档, 对 ISession 的描述如下: A single-threaded, short-lived object representing a conversation...启用二级缓存 Nh 默认未启用二级缓存, 启用二级缓存需要如下步骤: 1、 hibernate.cfg.xml 文件添加下面三个属性: <property name="cache.provider_class...也可以<em>在</em>实体类的 hbm 映射文件<em>中</em>配置使用二级缓存, 不过<em>在</em> hibernate.cfg.xml 文件中统一配置是推荐的做法。...从二级缓存读/写数据 Refresh:向二级缓存写数据,想不从二级缓存读数据,通过<em>在</em>配置文件设置cache.use_minimal_puts从数据库<em>中</em>读取数据时,强制二级缓存刷新 CacheRegion...以上是<em>在</em>项目中用到的二级缓存相关知识的整理, 肯定不完整, <em>NHibernate</em> 的缓存还有更多的地方需要挖掘。

42610

使用VS2015和Nhibernate实现与MySql数据库连接,实现增删改查操作

,MySQL-FRONT ,Connector/Net(选择.Net&Mono) Nhibernate包可以VS2015下载 ,对MySql操作,我用的是MySQL-FRONT,注意要想实现和数据库的链接...先写一个简单的给你定义的数据库添加一条元素的代码:(不使用Nhibernate的) 前提:先把该用的dll文件,添加到引用里面去不然,会连接不成功,之前下载的Connector/Net(选择.Net&...然后我们工程下面新建两个文件夹:Model文件夹用来存放数据库表类和映射类,还有一个Manger类用来存放对数据库执行增删改查操作的类。...我们Model文件下新建一个名字为APengPhao的类,这个刚好也是和数据库表名相同的,请看这个类的代码: using System; using System.Collections.Generic...//使用session查询APengChao 还记得这个类的功能吧 var userList= session.QueryOver

1.4K30

Nhibernate_nhibernate与ef区别

NHibernate用于把你的.Net对象持久化到底层的关系数据库.你完全不用自己编写Sql语句去操作这些对象,NH会代替你做.你的代码里面只需要关心这些对象,NH生成sql语句并能为你取到正确的东西...开发过程 HNibernate将会有一些工具帮助你,如:生成schema,根据映射文件(Mapping file)生成类,并更新schema(一个新开发者的建议).然而,本文档,前提是你已经手动的数据库的创建喝...载入NHibernate.Demo.QuickStart.User类..NH遵守.Net Framework使用Reflection载入类型的规则-所以遇到什么疑惑,就去查查.NET Framework...这些嵌入的Generator标记告诉NH怎样生成Primary Key(NH很方便的就能给你生成一个,不管是什么类型的,只要你告诉它怎样去做).我们举的例子,把它设置成"assigned",意思是"...代码里面使用NHibernate是很简单的事情: 1. 创建一个Configuration对象. 2.

55030

Fluent NHibernate之旅二--Entity Mapping

接着上一篇,今天我们说说ORM的Mapping。如果你要体验NHibernate的强大,首先你就要学会配置,包括SessionFactory和Mapping的配置。...m.Price).ColumnName("Price"); Map(m => m.CreateTime); } } 我们只需要继承Fluent的ClassMap类,然后构造方法完成映射方法...Map(Expression> expression):与Id类似,对应NHibernate的property,我这里只是简单的映射,还有很多特性,今后的教程中会慢慢使用...对于我这种新手来说,Fluent更适合我,因为我可以用它来进行学习NHibernate。 映射做好了,接下来我们NHibernate把映射加到配置。...Order实体,我们看到了订单状态我用了OrderState枚举类型,数据库存储类型为tinyint,对于它的映射,我们只需要: public class OrderMap : ClassMap<Order

98590

Fluent NHibernate之旅(四)-- 关系(上)

经过了前面三篇的介绍,相信大家对Fluent NHibernate已经有一定的了解了,我们学习,Fluent 也已经进入了RTM版本。...这次的版本发布离RC版只有半个月不到,修正了很多bug,同时补充了大量的功能,每天更新,也看到了大量的单元测试,我们相信Fluent NHibernate 已经相对稳定成熟了。...Mapping 今天我们将说一下ORM的R映射,我们现在的数据库大多都是关系型数据库了,所以可以说关系我们数据库设计也是非常重要的部分,NHibernate也非常重视这一块,但在传统方式,配置就比较麻烦...createTime = DateTime.ParseExact("2009-07-08 11:00", "yyyy-MM-dd hh:ss",null); User user = new...总结 因为关联在数据属于比较重要的一部分,所以准备拆分成上中下进行讲解。

1.2K60

Nhibernate_juan benet

NHibernate用于把你的.Net对象持久化到底层的关系数据库.你完全不用自己编写Sql语句去操作这些对象,NH会代替你做.你的代码里面只需要关心这些对象,NH生成sql语句并能为你取到正确的东西...开发过程 HNibernate将会有一些工具帮助你,如:生成schema,根据映射文件(Mapping file)生成类,并更新schema(一个新开发者的建议).然而,本文档,前提是你已经手动的数据库的创建喝...载入NHibernate.Demo.QuickStart.User类..NH遵守.Net Framework使用Reflection载入类型的规则-所以遇到什么疑惑,就去查查.NET Framework...这些嵌入的Generator标记告诉NH怎样生成Primary Key(NH很方便的就能给你生成一个,不管是什么类型的,只要你告诉它怎样去做).我们举的例子,把它设置成”assigned”,意思是”...代码里面使用NHibernate是很简单的事情: 1. 创建一个Configuration对象. 2.

35450
领券