在NHibernate QueryOver SelectGroup中截断DateTime,是指在使用NHibernate的QueryOver查询时,对DateTime类型的数据进行截断操作。NHibernate是一个开源的对象关系映射(ORM)框架,它可以将.NET对象映射到数据库中的表,并提供了强大的查询和持久化功能。QueryOver是NHibernate中的一种查询方式,它提供了一种类型安全的方式来构建HQL查询。
在NHibernate QueryOver SelectGroup中截断DateTime,可以使用SQL函数或者自定义的函数来实现。以下是一个示例:
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的自定义函数中定义,例如:
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类型的数据,例如:
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的自定义函数中定义,例如:
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类型的数据,例如:
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的自定义函数中定义,例如:
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类型的数据,例如:
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的自定义函数中定义,例如:
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类型的数据,例如:
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的自定义函数中定义,例如:
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类型的数据,例如:
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类型的数
领取专属 10元无门槛券
手把手带您无忧上云