[c#]返回 Timespan 蜱在 LINQ 查询中的差异

标签: Linq C#
发布时间: 2017/2/28 22:49:13
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我查询对象的列表,和我想要返回的对象中注册的时间相差 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));

但我真的想要知道的是如果有可能,到现在,在一个单一的 LINQ 查询从一个 DateTime 值获取时间跨度比较

解决方法 1:

它似乎错误是有关翻译的你 select 语句转换成 SQL 。如果结果窗体 fecthing 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 变化你可能应该将它存储到一个变量,在计算中使用它。

赞助商