假设我有一列 (datetime) 具有以下值:
2015-05-16 20:17:05.033
2015-05-16 20:29:07.130
2015-05-17 01:01:04.690
2015-05-17 01:02:28.053
2015-05-17 11:24:37.667
2015-05-17 11:25:24.913
如何选择不同的列表到 DateTime 列表
到
2015-05-16
2015-05-17
?
在普通 SQL 中,我可以只执行 DISTINCT CONVERT(date, myDateColumn)
但我如何在 Fluent nHibernate 中执行此操作?
最佳答案
distinct
要求使这有点复杂,但是 NHibernate 已经注册了各种日期/时间方法用于 Criteria 和 QueryOver 查询。这与您请求的 SQL 略有不同,但结果应该是相同的:
var distinctDates = session.QueryOver<MyTable>()
.Select(Projections.Distinct(
Projections.SqlFunction("date", NHibernateUtil.Date,
Projections.Property<MyTable>(mt => mt.DateCreated))))
.List<DateTime>();
这将生成以下 SQL:
SELECT
distinct dateadd(dd, 0, datediff(dd, 0, this_.DateCreated)) as y0_
FROM
MyTable this_
如果没有 distinct
要求,您可以执行以下操作:
session.QueryOver<MyTable>()
.Select(mt => mt.DateCreated.Date)
.List<DateTime>()
.Dump();
在 QueryOver 表达式内部,NHibernate“知道”如何将访问 Date
属性转换为正确的 SQL。
关于c# - Fluent nHibernate - 如何选择没有时间的 DISTINCT 日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30441529/