2011-07-08 2 views
6

Я использую EntityFramework 4, LINQ и C#.LINQ - использование выражения запроса для вычисления разницы во времени данных

Мне нужны данные отображения в GridView из выражения запроса с использованием Linq; Мне нужен проект как anonymous type значение рассчитывается на лету DateTime.UtcNow - cl.DateLocked Примечание: cl.DateLocked имеет тип DateTime, и мне нужно знать, сколько дней разница между этими двумя датами.

С помощью этого запроса я получаю сообщение об ошибке:

DbArithmeticExpression arguments must have a numeric common type. 

Любая идея, как сделать это в Linq? Если Linq не позволяет ему, как это сделать по-другому?

Спасибо за ваше время

var queryContentsLocked = from cl in context.CmsContentsLockedBies 
          join cnt in context.CmsContents 
          on cl.ContentId equals cnt.ContentId 
          join u in context.aspnet_Users 
          on cl.UserId equals u.UserId 
          select new 
          { 
          cl.DateLocked, 
          cnt.ContentId, 
          cnt.Title, 
          u.UserName, 
          u.UserId, 
          TimePan = DateTime.UtcNow - cl.DateLocked // Problem here!!! 
          }; 

ответ

7
var queryContentsLocked = from cl in context.CmsContentsLockedBies 
          join cnt in context.CmsContents 
          on cl.ContentId equals cnt.ContentId 
          join u in context.aspnet_Users 
          on cl.UserId equals u.UserId 
          select new 
          { 
          cl.DateLocked, 
          cnt.ContentId, 
          cnt.Title, 
          u.UserName, 
          u.UserId, 
          Days = SqlFunctions.DateDiff("day", cl.DateLocked, DateTime.UtcNow) 
          }; 
+0

Спасибо @Magnus, он отлично работает. Метод DateDiff находится в пространстве имен: using System.Data.Objects.SqlClient; – GibboK

-2

Попробуйте это:

DateTime.UtcNow.Subtract(cl.DateLocked).TotalDays 
+0

Ошибка: \t Недопустимый декларатор участника анонимного типа. Это должно быть сделано внутри выражения запроса Linq. – GibboK

2

без использования каких-либо SqlFunction

var grandTotalWork = (from t in db.AssignmentHandymandetails 
          join ad in db.AssignmentDetails on t.assignment_detail_id equals ad.assignment_detail_id 
          where ad.assignment_id == Convert.ToInt32(Label_assignmentId.Text) 
          select new { startTime = t.started_time.Value.TimeOfDay, endTime = t.end_time.Value.TimeOfDay, TotalWorkTime = (t.started_time.Value.TimeOfDay.Duration() - t.end_time.Value.TimeOfDay.Duration()).Duration()}); 

, то вы можете связать результат в GridView вы хотите

+1

спасибо за предложение, я действительно ценю его сейчас код читается – Dipen

+0

классный, спасибо :-) – kleopatra

Смежные вопросы