Skip to content

DateOnly quering not working #545

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
alc86 opened this issue Mar 31, 2022 · 11 comments
Open

DateOnly quering not working #545

alc86 opened this issue Mar 31, 2022 · 11 comments
Assignees
Labels
bug Something isn't working

Comments

@alc86
Copy link

alc86 commented Mar 31, 2022

Hi,

We are currently working on a project with .Net 6, EF Core 6, Npgsql provider and AspNetCore.OData. There is still a problem with the Expression generation because the expression tree contains elements with 'System.Nullable`1[Microsoft.OData.Edm.Date]'.
I think these elements should be of type DateOnly.

@alc86 alc86 added the bug Something isn't working label Mar 31, 2022
@julealgon
Copy link
Contributor

There is still a problem with the Expression generation because the expression tree contains elements with 'System.Nullable`1[Microsoft.OData.Edm.Date]'.
I think these elements should be of type DateOnly.

What problem? Can you elaborate a bit more and include a repro of the issue?

I think these elements should be of type DateOnly.

I assume you mean OData's own custom date only class and not .NET6's type, right? .NET6 DateOnly and TimeOnly are not currently supported by OData.

@alc86
Copy link
Author

alc86 commented Apr 1, 2022

I thought this is already implemented OData/ModelBuilder#22

@max1997dc
Copy link

HI! any news?

@NikAtIdeally
Copy link

Seems to be working in regular filter/select, but when trying to group by "DateOnly" field it throws "System.NullReferenceException: Object reference not set to an instance of an object."

Can anyone suggest a workaround to this issue for now?
Maybe way to cast to string in OData model builder? Or force it to think its a DateTime?

String is: "Results?apply=filter(projectId eq 1982)/groupby((projectId,answerText,responseDate),aggregate(weight with sum as sumWeight,id with countdistinct as count))"

That response date is causing the problem. Replacing it with any other column (including datetime) works just fine. But when its DateOnly I get that null ref.

@imaa
Copy link

imaa commented Jan 5, 2024

Getting this error when using DateOnly and Time Only
The LINQ expression 'DbSet<Entity_fdfcca13206d4762a7a17bdff77201cc>()
.Where(e => e.WorkDate.Value.Year * 10000 +
e.WorkDate.Value.Month * 100 + e.WorkDate.Value.Day == __p_0)'
could not be translated. Either rewrite the query in a form that can be translated,

or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'. See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.

EF Core 7
Net Core 6

@rsgilbert
Copy link

Similar error when I do a patch request. I am required to provide date only eg "2022-01-20". If I provide a datetime in the JSON eg "0001-02-24T00:00:00.000Z" I get an error saying : System.NullReferenceException: Object reference not set to an instance of an object.

@dennis-garavsky
Copy link

dennis-garavsky commented Mar 7, 2024

Hello, OData Team.

Question #1. What's the current support of DateOnly and TimeOnly types in the latest ASP.NET Core Web API/OData versions (primarily for .NET 8+ and EF Core 8+) and limitations?
Question #2. If OData does not support these newest types as of now, what is your vision/plans for the scenarios our customers having below?

Motivation: Because of the EF Core 8 breaking change and a huge adoption of EF Core 8 by developers after .NET 8 release last year (a tweet by MSFT), we at DevExpress want to support these newest types for the following CRUD scenarios:

  • DevExpress UI components for Blazor, JavaScript, WinForms, and WPF primarily (maybe .NET MAUI, WinUI later) when binding to EF Core 8 data sources (we have no show-stoppers here so far).
  • OData-based data sources and components for various UI and non-UI platforms (for instance, our JavaScript integration, our Blazor integration, our cross-platform Web API Service, to name just a few).
  • As you may understand, these enhancements also help our mutual goal with further .NET 8+, ASP.NET Core /Blazor, .NET MAUI, adoption/growth.

I saw another issue OData/ModelBuilder#22, but wanted to verify it directly with your team.

Thanks,
Dennis Garavsky
Product Manager at https://www.devexpress.com/
[email protected]

@julealgon
Copy link
Contributor

@habbes @mikepizzo ☝️

@ThomasHeijtink
Copy link

Hi, any news?

@ArnaudB88
Copy link

I am getting the following error when trying to filter on a sql nullable 'Date' column (DateOnly? type in .NET):

Microsoft.OData.ODataException: A binary operator with incompatible types was detected. Found operand types 'System.Nullable_1OfDateOnly' and 'Edm.Date' for operator kind 'GreaterThanOrEqual'.

  Stack Trace: 
BinaryOperatorBinder.PromoteOperandTypes(BinaryOperatorKind binaryOperatorKind, SingleValueNode& left, SingleValueNode& right, TypeFacetsPromotionRules facetsPromotionRules)
ODataUriResolver.PromoteBinaryOperandTypes(BinaryOperatorKind binaryOperatorKind, SingleValueNode& leftNode, SingleValueNode& rightNode, IEdmTypeReference& typeReference)
StringAsEnumResolver.PromoteBinaryOperandTypes(BinaryOperatorKind binaryOperatorKind, SingleValueNode& leftNode, SingleValueNode& rightNode, IEdmTypeReference& typeReference)
BinaryOperatorBinder.BindBinaryOperator(BinaryOperatorToken binaryOperatorToken)
MetadataBinder.BindBinaryOperator(BinaryOperatorToken binaryOperatorToken)
MetadataBinder.Bind(QueryToken token)
FilterBinder.BindFilter(QueryToken filter)

Is there a solution at the moment, or do we have to wait for a fix in the repo?

@ovirta
Copy link

ovirta commented Jun 12, 2024

Any timeframe for DateOnly/TimeOnly support for odata?

We have sql data of Date type (instead of DateTime) and would love to be able to use DateOnly properties on entities.

Currently our odata queries time out with large top and skip parameter values if DateOnly properties are included in the $select clause. Removing dateonly properties fixes the issue and queries finish almost instantly.

Edit: We are also using ef core so is it possible that odata is trying to do client side parsing of the data? (that ef core does not support anymore imo)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests