0

我有一个 IQueryable 查询,有时我需要以相同的方法使用它。此查询基于作为参数传递的另一个查询。

我需要将一个值乘以两个日期之间的天数的结果相加。

参数查询 = IQueryable 列表;

IQueryable<ChildEntity> query = lista.SelectMany(s => s.ChildEntities).Where(w=>w.IsActive.Equals("Y");

DateTime maxDate = lista.Max(m => m.Date);

decimal value = query.Sum(s => (s.Value) * (maxDate - s.ParentEntity.Date).Days);

这给出了例外:

Specified method is not supported.

我也试过:

decimal value = query.Sum(s => (s.Value) *  SqlMethods.DateDiffDay(maxDate, s.Parent.Date);

还尝试了 SqlFunctions.DateDiffEntityFunctions.DiffDays并且所有这些最后三个都给了我这个例外:

Method 'System.Nullable`1[System.Int32] 
DateDiffDay(System.Nullable`1[System.DateTime], System.Nullable`1[System.DateTime])' 
is not supported for execution as SQL.

我不想使用 Enumerable 因为这会导致大量记录。

有没有其他方法可以解决这个问题?

(顺便说一句,我使用 Devart 作为提供者。)

4

2 回答 2

0

您的问题是您正在运行查询的数据库没有像 net 这样的时间跨度数据类型,但是大多数数据库将日期存储为自正式开始日期以来的天数,这意味着如果您转换日期对于一个数字,您可以直接对其进行算术运算

days = ((int)maxdate) - ((int)currentdate)

注意:那是 sudo 不可运行

于 2013-10-10T14:08:17.403 回答
0
int days = 0;
DateTime today = DateTime.Now;
DateTime maxDate = lista.Max(m => m.Date);

While (today <= maxDate)
{
   today.AddDays(7);
   days++
}
于 2013-10-10T14:09:17.330 回答