我正在查询对象列表,我想返回一个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查询中
答案 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
的值发生变化,您应该将其存储到变量中并在计算中使用它。