使用linq从日期减去天数

时间:2015-01-15 21:25:28

标签: c# linq postgresql-9.1 bltoolkit

我有一个函数,它需要几天(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'))

错误:{“错误: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。

1 个答案:

答案 0 :(得分:3)

inDate = inDate.AddDays(-daysPrior)
var query = dataContext.Where(x => x.SomeDate >= inDate)