Есть ли способ сравнить LocalDate после получения часовых поясов в Npgsql EF Core?C#

Место общения программистов C#
Ответить
Гость
 Есть ли способ сравнить LocalDate после получения часовых поясов в Npgsql EF Core?

Сообщение Гость »


Плагин Nodatime не поддерживает параметризованные часовые пояса. Я хотел бы создать собственный вспомогательный метод для выполнения логики приведенного ниже кода. Является ли причина, по которой мой LINQ не может быть переведен, из-за параметризованного часового пояса, или невозможно написать общее выражение для сравнения значений пользовательского типа?

//Неверно вар картошкаCreatedToday = ждут dbContext.Potatoes.Where(m => m.CreatedOn.InZone(часовой пояс).Date == localDate).ToListAsync; //Правильный вар carsCreatedToday = ждут dbContext.Potatoes.Where(m => m.CreatedOn.InZone(DateTimeZoneProviders.Tzdb[timezoneName]).Date == localDate).ToListAsync; //Пользовательский вспомогательный метод public static IQueryable InstantFilter (источник IQueryable, строковая операция, значения string[], строковое имя свойства, часовой пояс DateTimeZone) { // Проверяем, есть ли у типа T свойство с именем «CreatedOn» вар созданныйOnProperty = typeof(T1).GetProperty(propertyName); значение var = Instant.FromUnixTimeMilli Seconds(Convert.ToInt64(values[0].Trim().ToLower())).InZone(часовой пояс).Date; если (createdOnProperty!= ноль) { параметр var = Expression.Parameter(typeof(T1), "m"); var propertyExpression = Expression.Property(параметр, созданныйOnProperty); var dateConstant = Expression.Constant(value, typeof(LocalDate)); var timezoneConstant = Expression.Constant(часовой пояс, typeof(DateTimeZone)); MethodInfo MethodInfo = typeof(Instant).GetMethod("InZone", new[] { typeof(DateTimeZone) }); Выражение MethodCallExpression = Expression.Call(propertyExpression, MethodInfo, timezoneConstant); var dateProperty = typeof(ZonedDateTime).GetProperty("Дата"); var propertyExpression2 = Expression.Property(callExpression, dateProperty); Предикат Expression; если (оп == ">") { предикат = Expression.Lambda(Expression.GreaterThan(propertyExpression, dateConstant), параметр); } иначе, если (оп == "=") { предикат = Expression.Lambda(Expression.GreaterThanOrEqual(propertyExpression, dateConstant), параметр); } еще { предикат = Expression.Lambda(Expression.Equal(propertyExpression, dateConstant), параметр); } вернуть источник.Где(предикат); } источник возврата; } Я пытался найти руководства по npgsql и nodatime, но не нашел решения, поэтому был бы чрезвычайно признателен, если бы кто-нибудь указал мне правильный путь.

https://www.npgsql.org/efcore/mapping/n ... ranslation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»