LcSalazar
LcSalazar

Reputation: 16841

Return Timespan ticks difference in LINQ queries

I'm querying a list of objects, and I want to return a TimeSpan's ticks list of the difference between the time registered in the object, and now.

I wanted all in one expression, so:

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

But I get the following error:

Exception Details: DbArithmeticExpression arguments must have a numeric common type

I already managed to do a workaround. For example, my code looks like this now:

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));

But what I really wanted to know is if it is possible to get the Timespan diff from a DateTime value to now, in a single LINQ query

Upvotes: 1

Views: 1353

Answers (1)

Selman Gen&#231;
Selman Gen&#231;

Reputation: 101701

It seems the error is relevant to the translation of your select statement into SQL.If fecthing the results form DB is not a problem you can do it using AsEnumerable and then project the items:

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

And since the value of DateTime.Now changes you should probably store the it into a variable and use it in the calculation.

Upvotes: 1

Related Questions