2013-03-29 4 views
8

Chcę uzyskać dzisiaj wprowadzone rekordy przy użyciu LINQ do SQL. Napisałem poniższy kod, ale zwraca on również poprzednie zapisy daty.Jak napisać zapytanie LINQ do SQL w celu uzyskania aktualnych rekordów daty?

DateTime todaysDate = DateTime.Now; 
DateTime yesterdaysDate = DateTime.Now.AddDays(-1); 

var result = (from a in cxt.visitor.OrderByDescending(n => n.singin) 
       where (a.singin > yesterdaysDate && a.singin <= todaysDate) 
       select new {a.visitorid, a.visitorname, a.visitingperson, a.phonenumber, a.reasonforvisit, a.signature, a.singin }); 

Czy możesz mi powiedzieć, jak uzyskać dzisiejsze wprowadzone rekordy tylko przy użyciu LINQ do SQL?

Odpowiedz

29

Insetad od DateTime.Now użytku DateTime.Today jak:

DateTime startDateTime = DateTime.Today; //Today at 00:00:00 
DateTime endDateTime = DateTime.Today.AddDays(1).AddTicks(-1); //Today at 23:59:59 

var result = (from a in cxt.visitor.OrderByDescending(n => n.singin) 
      where (a.singin >= startDateTime && a.singin <= endDateTime) 
      select new {a.visitorid, a.visitorname, a.visitingperson, a.phonenumber, a.reasonforvisit, a.signature, a.singin }); 

lub Wypróbuj następujące prostszą wersję, (nie jestem pewien, czy to byłoby przełożyć na SQL)

var result = (from a in cxt.visitor.OrderByDescending(n => n.singin) 
      where (a.singin.Date == DateTime.Today) 
      select new {a.visitorid, a.visitorname, a.visitingperson, a.phonenumber, a.reasonforvisit, a.signature, a.singin }); 
+3

is'nt 'DateTime.Today.AddDays (1) .AddTicks (-1)' i '<= endDateTime' nieco zbyt skomplikowane? 'DateTime.Today.AddDays (1)' i '

+0

Zdecydowanie miałem na myśli '<= endDateTime'. Miałem na myśli fakt, że używając '.AddTicks (-1)' oznacza, że ​​potrzebujesz porównania '<=', kiedy możesz po prostu go opuścić i użyć '<'. To naprawdę nie ma znaczenia, twoja odpowiedź jest nadal poprawna. :) –

+0

dziękuję, jest bardzo przydatna – CRK

Powiązane problemy