【问题标题】:Getting days between two dates with IQueryable使用 IQueryable 获取两个日期之间的天数
【发布时间】:2013-10-10 14:04:28
【问题描述】:

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

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

参数查询 = IQueryable lista;

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 作为提供者。)

【问题讨论】:

  • IEnumerable 不是您的问题,因为像 IQueryable 这样的 IEnumerable 仅在实例化时进行评估,只要您删除 Max 日期变量,这不会发生,即 DateTime maxDate = lista.Max(m => m.日期);
  • 只要您不阅读列表,它就会将列表定义传递给查询生成器

标签: c# date iqueryable


【解决方案1】:
int days = 0;
DateTime today = DateTime.Now;
DateTime maxDate = lista.Max(m => m.Date);

While (today <= maxDate)
{
   today.AddDays(7);
   days++
}

【讨论】:

    【解决方案2】:

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

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

    注意:sudo 无法运行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多