Есть ли способ сравнить LocalDate после получения часовых поясов в Npgsql EF Core? ⇐ 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
Плагин 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
Мобильная версия