oData v4 фильтрация по DateTime, строка не преобразуется в DateTime - PullRequest
0 голосов
/ 01 ноября 2018

Мой URI:

$ filter = IsActive eq true и IsAutomated eq true и WebSite ne null и веб-сайт ne '' и LastUpdated le 2018-12-30T23: 59: 59,99Z

Контроллер:

    private readonly BrokerForgeContext _ctx;

    [EnableQuery(PageSize = 20)]
    [HttpGet]
    public IActionResult Get()
    {
        return Ok(_ctx.Locations);
    }

Запуск:

    private static IEdmModel GetEdmModel()
    {
        ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
        builder.EntitySet<CashBidPrice>("CashBidPrices");
        builder.EntitySet<Location>("Locations");

        builder.EntityType<CashBidPrice>().Collection.Function("DeleteToday").Returns<bool>();

        return builder.GetEdmModel();
    }

Модель сущности:

public partial class Location
{
    [Key]
    public int LocationId { get; set; }
    public int? Loc_Id { get; set; }
    public string Name { get; set; }
    **[[ REMOVED FOR BREVITY ]]**
    public DateTime? LastUpdated { get; set; }
}

Я хочу получить все местоположения, где запись LastUpdate меньше, чем сегодня, но есть некоторые серьезные проблемы с фильтрацией записи LastUpdated. Все остальное прекрасно работает.

Ошибка:

Произошло необработанное исключение при обработке запроса. SqlException: преобразование не выполнено при преобразовании даты и / или времени из символьной строки. System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, bool breakConnection, действие wrapCloseInAction) TargetInvocationException: исключение было выдано целью вызова. System.RuntimeMethodHandle.InvokeMethod (цель объекта, аргументы объекта [], сигнатура сигнатуры, конструктор bool, исключения bool wrapExceptions)

1 Ответ

0 голосов
/ 01 ноября 2018

Хорошо, после тонны проб и ошибок. Столбец базы данных имел тип DateTime. Поэтому я использовал этот скрипт, чтобы изменить его:

ALTER TABLE Locations
ADD LastUpdated2 datetimeoffset
GO

UPDATE Locations
SET LastUpdated2 = LastUpdated

ALTER TABLE Locations
DROP COLUMN LastUpdated

Я переименовал LastUpdated2 в LastUpdated вручную, используя SSMS

Затем я изменил свою модель сущности на тип DateTimeOffset

public DateTimeOffset? LastUpdated { get; set; }

Мой новый URI-фильтр:

? $ Filter = IsActive eq true и IsAutomated eq true и WebSite ne null и WebSite ne '' и LastUpdated lt 2018-12-30T23: 59: 59.99Z

...