Skip to content

Commit 0168279

Browse files
authored
support cast function (#98)
* support cast function
1 parent 7258abc commit 0168279

13 files changed

+166
-51
lines changed

README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ Library for creating complex OData queries (OData version 4.01) based on data mo
2424
* [`indexof`](#indexof)
2525
* [`startswith`](#startswith)
2626
* [`length`](#length)
27+
* type
28+
* [`cast`](#cast)
2729
* sorting by several fields with indication of direction
2830

2931
## Installation
@@ -329,6 +331,15 @@ var constValue = 3;
329331
```
330332
> $filter=length(ODataKind/ODataCode/Code) gt 0
331333

334+
## Usage type functions
335+
336+
#### <a name="cast"/> cast
337+
338+
```csharp
339+
.Filter((s, f) => f.Contains(f.Cast(s.ODataKindNew.ODataCode.Code, "Edm.String"), "55"))
340+
```
341+
> $filter=contains(cast(ODataKindNew/ODataCode/Code,Edm.String),'55')
342+
332343
## Usage other functions
333344

334345
#### ConvertEnumToString

src/OData.QueryBuilder/Conventions/Functions/IConvertFunction.cs

Lines changed: 0 additions & 13 deletions
This file was deleted.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using System;
2+
using System.Collections.Generic;
3+
4+
namespace OData.QueryBuilder.Conventions.Functions
5+
{
6+
/// <summary>
7+
/// Custom functions
8+
/// </summary>
9+
public interface ICustomFunction
10+
{
11+
/// <summary>
12+
/// Convert enum to string
13+
/// </summary>
14+
T ConvertEnumToString<T>(T value) where T : Enum;
15+
16+
/// <summary>
17+
/// Convert datetime to string
18+
/// </summary>
19+
DateTime ConvertDateTimeToString(DateTime value, string format);
20+
21+
/// <summary>
22+
/// Convert datetimeoffset to string
23+
/// </summary>
24+
DateTimeOffset ConvertDateTimeOffsetToString(DateTimeOffset value, string format);
25+
26+
/// <summary>
27+
/// Replace characters
28+
/// </summary>
29+
string ReplaceCharacters(string value, IDictionary<string, string> keyValuePairs);
30+
31+
/// <summary>
32+
/// Replace characters
33+
/// </summary>
34+
IEnumerable<string> ReplaceCharacters(IEnumerable<string> values, IDictionary<string, string> keyValuePairs);
35+
}
36+
}

src/OData.QueryBuilder/Conventions/Functions/IODataDateFunction.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
namespace OData.QueryBuilder.Conventions.Functions
44
{
5-
public interface IODataDateFunction
5+
/// <summary>
6+
/// https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_DateandTimeFunctions
7+
/// </summary>
8+
public interface IODataDateTimeFunction
69
{
710
/// <summary>
811
/// http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_date
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
namespace OData.QueryBuilder.Conventions.Functions
22
{
3-
public interface IODataFunction : IODataStringAndCollectionFunction, IODataDateFunction, IConvertFunction, IReplaceFunction
3+
/// <summary>
4+
/// OData functions
5+
/// </summary>
6+
public interface IODataFunction : IODataStringAndCollectionFunction, IODataDateTimeFunction, ICustomFunction, ITypeFunction
47
{
58
}
69
}

src/OData.QueryBuilder/Conventions/Functions/IODataStringAndCollectionFunction.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public interface IODataStringAndCollectionFunction
4040

4141
/// <summary>
4242
/// http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_startswith
43+
/// </summary>
4344
bool StartsWith(string columnName, string value);
4445

4546
/// <summary>

src/OData.QueryBuilder/Conventions/Functions/IReplaceFunction.cs

Lines changed: 0 additions & 11 deletions
This file was deleted.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
namespace OData.QueryBuilder.Conventions.Functions
22
{
3+
/// <summary>
4+
/// Sort functions
5+
/// </summary>
36
public interface ISortFunction
47
{
8+
/// <summary>
9+
/// Sort ascending
10+
/// </summary>
511
ISortFunction Ascending<T>(T column);
612

13+
/// <summary>
14+
/// Sort descending
15+
/// </summary>
716
ISortFunction Descending<T>(T column);
817
}
918
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
namespace OData.QueryBuilder.Conventions.Functions
2+
{
3+
/// <summary>
4+
/// https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_TypeFunctions
5+
/// </summary>
6+
public interface ITypeFunction
7+
{
8+
/// <summary>
9+
/// https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_cast
10+
/// </summary>
11+
/// <param name="columnName">Column name</param>
12+
/// <param name="type">https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/entity-data-model-primitive-data-types#primitive-data-types-supported-in-the-entity-data-model</param>
13+
/// <returns></returns>
14+
string Cast(string columnName, string type);
15+
}
16+
}

src/OData.QueryBuilder/Expressions/ValueExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ protected virtual object GetValueOfMethodCallExpression(MethodCallExpression met
7474
{
7575
switch (methodCallExpression.Method.Name)
7676
{
77-
case nameof(IReplaceFunction.ReplaceCharacters):
77+
case nameof(ICustomFunction.ReplaceCharacters):
7878
var @symbol0 = GetValue(methodCallExpression.Arguments[0]) as ICollection<string>;
7979
var @symbol1 = GetValue(methodCallExpression.Arguments[1]) as IDictionary<string, string>;
8080

0 commit comments

Comments
 (0)