返回Timespan在LINQ查询中记录差异

时间:2014-11-11 17:54:42

标签: c# linq

我正在查询对象列表,我想返回一个TimeSpan的滴答列表,列出对象中注册的时间与现在之间的差异。

我想要一个表达式,所以:

var list = (from r in res where r.Site == "CNIS"
    select Math.Abs((r.Timestamp.Value - DateTime.Now).Ticks)).ToList();

但是我收到以下错误:

  

异常详细信息: DbArithmeticExpression参数必须具有数字公共类型

我已经设法做了一个解决方法。例如,我的代码现在看起来像这样:

var list = new List<long>();
foreach(var item in (from r in res where r.Site == "CNIS" select r))
    list.Add(Math.Abs((item.Timestamp.Value - DateTime.Now).Ticks));

但我真正想知道的是,是否可以将Timespan差异从DateTime值变为现在,在单个LINQ查询中

1 个答案:

答案 0 :(得分:1)

似乎错误与将select语句转换为SQL有关。如果将结果形式DB归结为问题,则可以使用AsEnumerable然后进行项目项目:

var now = DateTime.Now;
var list = res.Where(r => r.Site == "CNIS")
           .AsEnumerable()
           .Select(x => Math.Abs((x.Timestamp.Value - now).Ticks))
           .ToList();

由于DateTime.Now的值发生变化,您应该将其存储到变量中并在计算中使用它。