c# - Fluent nHibernate - 如何选择没有时间的 DISTINCT 日期?

标签 c# fluent-nhibernate

假设我有一列 (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/

相关文章:

c# - NHibernate - 删除时将外键列设置为空

nhibernate - 如何将 Fluent NHibernate Automapping 与实体中的多个相同类型的列表一起使用?

c# - 进行异步 Web 服务调用和在另一个线程中进行同步 Web 服务调用有什么区别?

c# - 从后面的代码访问用户控件 (ascx) 的父 DIV

c# - 在 Android Xamarin 中创建列表 <String>

.net - FluentNHibernate 映射;无法使用比例/精度映射 double 或小数

c# - NHibernate 不同 session 间数据不一致

c# - 使用 linq 和 Entity Framework 创建适当的模型

c# - NetSuite SuiteTalk "customSearchJoin"从 SOAP XML 响应访问

c# - NHibernate/Fluent NHibernate 动态列映射