nie jest obsługiwany w Linq do EF.Linq-to-EF DateTime.ToLocalTime nieobsługiwany
Co to jest alternatywa? Kończy mi się pomysł.
nie jest obsługiwany w Linq do EF.Linq-to-EF DateTime.ToLocalTime nieobsługiwany
Co to jest alternatywa? Kończy mi się pomysł.
znaleźć rozwiązanie w tej question
public partial class Person {
partial void OnLoaded() {
this._BirthDate = DateTime.SpecifyKind(this._BirthDate, DateTimeKind.Utc);
}
}
Mam ten błąd. LINQ to Entities nie rozpoznaje metody "System.DateTime SpecifyKind (System.DateTime, System.DateTimeKind)", a tej metody nie można przetłumaczyć na wyrażenie składu. – ove
Zamiast korzystania .ToLocalTime() wewnątrz zapytania LINQ używać odwrotny konwersji poza zapytania o parametrach.
var dateUniversal = dateParam.ToUniversalTime();
var query = myTable.Where(t => t.DateTime > dateUniversal);
Co do zasady, należy przechowywać daty i godziny w UTC w bazie danych.
Konwertuj lokalną datę/czas na UTC w swoim kodzie przed zapisaniem ich w bazie danych.
Podobnie, jeśli chcesz pokazać czas lokalny z UTC w bazie danych, przekonwertuj go w kodzie po pobraniu bazy danych.
Jestem tego świadomy. Muszę zrobić specjalny przypadek i stwierdzić, czy mogę uruchomić .ToUniversalTime() lub .ToLocalTime() przy użyciu linq – ove
Jak już ustaliłeś, nie jest to dobry pomysł. Możesz zrobić lepiej, naprawiając "specjalny przypadek". HTH. –
@in_visible "Przypadki specjalne" są zwykle również znane jako "wtf" przez innych programistów. – Will
Korzystałem z kombinacji rozszerzeń i polegam na tym, że wartość przekazywana z front-endu mojej aplikacji do LocalTime. Tak więc, jeśli miałbym dwa razy daty, np. ... datę rozpoczęcia i datę końcową dla raportu, wstawiłbym je tam .. pozwól użytkownikowi przesłać w LocalTime .. następnie na tylnej części mojego kontrolera .. Chciałbym użyć zmiennych sdate i edate w moim Linq do Query encji. Metody statycznych rozszerzeń rzuciłem w statyczną klasę pomocniczą. Przepraszam, że spóźniłem się ponad rok. :)
DateTime sdate = CalcHelper.AbsoluteStart(model.StartDate);
DateTime edate = CalcHelper.AbsoluteEnd(model.EndDate);
public static DateTime AbsoluteStart(this DateTime dateTime)
{
return dateTime.Date.ToUniversalTime();
}
public static DateTime AbsoluteEnd(this DateTime dateTime)
{
return AbsoluteStart(dateTime).AddDays(1).AddTicks(-1).ToUniversalTime();
}
jeśli masz strefy czasowej z serwera może być w stanie używać EntityFunctions zastosować przesunięcie w zapytaniu linq
var offset = TimeZoneInfo.Local.BaseUtcOffset.TotalMinutes;
var result = db.Dates.Where(a =>
EntityFunctions.DiffDays(EntityFunctions.AddMinutes(a.Date, offset), DateTime.Now) == 0);
Konwersja DateTime do String dla porównania, dla Przykład:
const string DATE_FORMAT = "yyyy/MM/dd";
var query = sampleTable.Where(x => x.DateTime.ToString(DATE_FORMAT) > DateTime.Now.ToString(DATE_FORMAT));
Ten rodzaj porównywania hackowania stringów może działać dla klauzuli 'Where'; jak byś zrobił coś podobnego do 'GroupBy' chociaż? –
Możesz spróbować tak:
var promotions = _promotionService.GetAll(
x => (DbFunctions.TruncateTime(x.CreatedDate.Value) >= viewModel.GTXFromDate.Date)
&& (DbFunctions.TruncateTime(x.CreatedDate.Value) <= viewModel.GTXToDate.Date));
Linq do SQL i Entity Framework to nie to samo. Którego używasz? –
Linq2Sql i Linq2EF to dwa oddzielne produkty. Który to? – spender
Jak próbujesz użyć ToUniversalTime - w klauzuli where lub select? – Phil