【问题标题】:Subtracting days from a date using linq使用 linq 从日期中减去天数
【发布时间】:2015-01-15 21:25:28
【问题描述】:

我有一个函数,它需要天数(var daysPrior)和一个日期(var inDate)。日期是我们正在查看的当前日期(对于实时系统,它将是今天的日期)。 需要从我们数据库中的日期字段中减去天数(var SomeDate, type:timestamp with time zone)。

我正在尝试在此函数中编写一个 linq 查询,以从我们的 postgres 数据库中的日期字段中减去天数。我已经尝试了几件事,并且没有运气做了很多搜索。

尝试 1

我从这个查询开始。

var negatedDaysPrior = System.Math.Abs(daysPrior) * (-1);
var query = dataContext.Table.Where(x => x.SomeDate.Value.AddDays(negatedDaysPrior) <= inDate);

这将转换为以下 SQL(取自异常的 ErrorSQL 字段)并给出以下错误:

SELECT
    x.SomeFields
FROM
    schema.table x
WHERE
    x.some_date + Interval '((E'-5')) Day' <= ((E'2015-01-16 09:45:26.513059'))

错误:{"ERROR: 42601: 在\"')) 日或附近出现语法错误\""}

尝试 2

var negatedDaysPrior = System.Math.Abs(daysPrior) * (-1);
TimeSpan timespanDays = new TimeSpan(daysPrior, 0, 0, 0);

var query = dataContext.Table.Where(x => x.SomeDate.Value.Subtract(timespanDays) <= inDate);

当我运行它时,我得到一个 BLToolkit.Data.Linq.LinqException:

'ConvertNullable(x.SomeDate).Subtract(value(ReferenceToMyFile+<>c__DisplayClass15+<>c__DisplayClass17).timespanDays)' cannot be converted to SQL.

有谁知道是否可以使用 linq 从数据库中的日期中减去天数?

我们使用的工具有:postgres 数据库、用于 linq 到 sql 转换的 BLToolkit。

【问题讨论】:

    标签: c# linq postgresql-9.1 bltoolkit


    【解决方案1】:
    inDate = inDate.AddDays(-daysPrior)
    var query = dataContext.Where(x => x.SomeDate >= inDate)
    

    【讨论】:

    • 请添加一些解释性文字,描述为什么当 OP 的其他尝试没有奏效时这会起作用。这将帮助未来的访问者理解为什么这是最好的答案(如果确实是:))。
    • @MikeMcCaughan 我认为理查德的代码是不言自明的,除非你不熟悉 lambda 表达式。
    • 不是问题@RichardSchneider
    • 我补充说,在低质量审查队列中审查它时,显然我不是唯一一个担心缺乏解释的人。不过,我没有投票关闭它,因为我确实认为它回答了 OP 的问题。需要添加的只是一些关于如何在 lambda 之外进行计算的文本,以便 LINQ 不会尝试将其转换为 SQL。是否添加说明性文字当然取决于作者。
    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    相关资源
    最近更新 更多