2011-07-08 4 views
6

EntityFramework 4, LINQ ve C# kullanıyorum.LINQ - veri süresi farkını hesaplamak için bir sorgu ifadesi kullanarak

Bir GridView uygulamasında Linq; anonymous type numaralı projeye DateTime.UtcNow - cl.DateLocked no'lu uçta bir değer hesaplaması yapmalıyım. Not: cl.DateLocked, DateTime tipindedir ve bu iki tarih arasındaki farkın kaç gün olduğunu bilmem gerekiyor.

DbArithmeticExpression arguments must have a numeric common type. 

Bir fikrin nasıl Linq bunu yapmak için: Bu sorgu ile

bir hata alıyorsunuz? Linq buna nasıl izin vermezse, bunu farklı bir şekilde nasıl yapmalı? Zaman ayırdığınız için

Teşekkür

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!!! 
          }; 

cevap

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

Teşekkürler @Magnus harika çalışıyor. DateDiff yöntemi ad alanındadır: System.Data.Objects.SqlClient kullanarak; – GibboK

-2

bu deneyin:

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

Hata: \t Geçersiz anonim tip üye declarator. Linq sorgu ifadesinin içinde yapılmalıdır. – GibboK

2

sonra

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

Eğer

dilek GridView sonucu bağlayabilir herhangi SqlFunction kullanmadan
+1

öneri için teşekkürler, gerçekten takdir ediyorum şimdi kodu okunabilir – Dipen

+0

cool, teşekkürler :-) – kleopatra