Wyszukiwanie po zmiennej typu DateTime

0

Grafik

start
start
dzien |

Cześć,
Mam problem, ponieważ posiadam taką bazę danych jak wyżej gdzie użytkownik deklaruje godziny przyjścia do pracy i wyjścia oraz dzień w który zjawi się w pracy. Wiadomo, że tabela ma więcej pól, ale jako że wszystko rozbija się o zmienną typu DateTime nie ma sensu, żebym ją tu prezentował. Wracając do sedna, problem jest w tym, że gdy powiedzmy 5 pracowników zadeklaruje dni w które przyjdzie do pracy, ja chciałbym wyciągnać z bazy wszystkie dni o określonej dacie. Np chciałbym wyświetlić pracowników którzy zjawią się w pracy za tydzień w poniedziałek czyli 09.02.2015.

 @using (Html.BeginForm())
{
<p>
Title: @Html.TextBox("searchstring") <br />
<input type="submit" value="Filter" />
</p>
}
public ActionResult Grafik(string searchstring)
{


var days = from m in db.Grafik
select m;
if (!String.IsNullOrEmpty(searchstring))
{ days = days.Where(s => s.dzien.Equals(searchstring)); }
return View(days);

} 

Kombinuje w ten sposób, ale wiadomo, że przekazywanie za pomocą stringa to mizerne rozwiązanie, poza tym jak już przekazuje string do porównania z kolumną typu DateTime, to wyskakują błędy, że tych wartości nie można porównać.

Bardzo proszę o pomoc i wyrozumiałość, bo jestem mocno początkujący :)

0

Coś takiego powinno zadziałać:

var dt = DateTime.Parse("searchString");
//i w linq
s=> s.dzien.Date == dt.Date
0

Okej zaraz spróbuję i dam znać.

0

The string was not recognized as a valid DateTime. There is an unknown word starting at index 0.

Jakiś pomysł?

0

Pomyłka, miało być tak:

DateTime.Parse(searchString);

Ta data musi też być w odpowiednim formacie aby mogła być sparsowana.

0

Co się kryje pod searchString? Jak masz tam jakiś format daty inny niż twoje ustawienia regionalne możesz użyć funkcji DateTime.ParseExact:

DateTime now = DateTime.ParseExact("13.12.2015", "dd.MM.yyyy", null);

https://msdn.microsoft.com/en-us/library/w2sa9yss(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

0

Jak przedmówcy powiedzieli musisz sparsować string na typ DateTime zapomocą metod DateTime.Pares(), bądź DateTime.ParseExact(). Po sparsowaniu stosujesz zwykłe porównanie:

  var result = (from dt in db.Tabela where dt.data== data select dt ).ToList();
0

Pod search string kryje się to co zostanie przesłane przez użytkownika z poniższego formularza:

 @using (Html.BeginForm())
{
<p>
Title: @Html.TextBox("searchstring") <br />
<input type="submit" value="Filter" />
</p>
}

w mojej bazie danych format daty w kolumnie wygląda YYYY-MM-DD HHSS
ja próbuję wpisać http://localhost:29910/Admin/Grafik?searchstring=2015-01-01
i zwrot
The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

0

Chcesz się bawić w zgaduj zgadule z tym co użytkownik miał na myśli wpisując datę do textboxa? Daj wybór daty z DatePicker'a.

0

mam datepickera spokojnie, jest przeznaczony dla tych którzy deklarują godziny przyjścia do pracy
ja jako admin mogę ręcznie wpisywać datę nie stanowi to problemu :)

0

Zdaje się że nie można pobrać dt.Date w linq. Spróbuj tak, ale też nie sprawdzałem.

var dt = DateTime.Parse(searchString).Date;
//i w linq
s => EntityFunctions.TruncateTime(s.dzien) == dt
0

działa, dziękuję damian i gratuluje wiedzy, serio
dziękuję również reszcie za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1