我有一个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.DateDiff 和 EntityFunctions.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作为提供者。)
答案 0 :(得分:0)
您的问题是您运行查询的数据库没有像net那样的时间跨度数据类型,但是大多数数据库存储的日期是自正式开始日期以来的天数,这意味着如果您将日期转换为您可以直接算术的数字
days = ((int)maxdate) - ((int)currentdate)
注意:那就是sudo不能运行
答案 1 :(得分:0)
int days = 0;
DateTime today = DateTime.Now;
DateTime maxDate = lista.Max(m => m.Date);
While (today <= maxDate)
{
today.AddDays(7);
days++
}