mirror of
https://github.com/Biarity/Sieve.git
synced 2024-11-22 05:22:57 +01:00
commit
767e8d87fe
@ -127,10 +127,12 @@ namespace Sieve.Services
|
||||
var converter = TypeDescriptor.GetConverter(property.PropertyType);
|
||||
var parameter = Expression.Parameter(typeof(TEntity), "e");
|
||||
|
||||
dynamic filterValue = Expression.Constant(
|
||||
converter.CanConvertFrom(typeof(string)) ?
|
||||
converter.ConvertFrom(filterTerm.Value) :
|
||||
Convert.ChangeType(filterTerm.Value, property.PropertyType));
|
||||
|
||||
dynamic constantVal = converter.CanConvertFrom(typeof(string))
|
||||
? converter.ConvertFrom(filterTerm.Value)
|
||||
: Convert.ChangeType(filterTerm.Value, property.PropertyType);
|
||||
|
||||
Expression filterValue = GetClosureOverConstant(constantVal);
|
||||
|
||||
dynamic propertyValue = Expression.PropertyOrField(parameter, property.Name);
|
||||
|
||||
@ -201,6 +203,14 @@ namespace Sieve.Services
|
||||
return result;
|
||||
}
|
||||
|
||||
//Workaround to ensure that the filter value gets passed as a parameter in generated SQL from EF Core
|
||||
//See https://github.com/aspnet/EntityFrameworkCore/issues/3361
|
||||
private Expression GetClosureOverConstant<T>(T constant)
|
||||
{
|
||||
Expression<Func<T>> closure = () => constant;
|
||||
return closure.Body;
|
||||
}
|
||||
|
||||
private IQueryable<TEntity> ApplySorting<TEntity>(
|
||||
ISieveModel<IFilterTerm, ISortTerm> model,
|
||||
IQueryable<TEntity> result,
|
||||
|
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Sieve.Attributes;
|
||||
@ -21,5 +22,9 @@ namespace SieveTests.Entities
|
||||
|
||||
[Sieve(CanFilter = true, CanSort = true)]
|
||||
public DateTimeOffset DateCreated { get; set; } = DateTimeOffset.UtcNow;
|
||||
|
||||
[Sieve(CanFilter = true, CanSort = true)]
|
||||
[Column(TypeName = "datetime")]
|
||||
public DateTime DateLastViewed { get; set; } = DateTime.UtcNow;
|
||||
}
|
||||
}
|
||||
|
47
SieveTests/Migrations/20180522013323_AddDateLastViewedColumn.Designer.cs
generated
Normal file
47
SieveTests/Migrations/20180522013323_AddDateLastViewedColumn.Designer.cs
generated
Normal file
@ -0,0 +1,47 @@
|
||||
// <auto-generated />
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage;
|
||||
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
||||
using SieveTests.Entities;
|
||||
using System;
|
||||
|
||||
namespace SieveTests.Migrations
|
||||
{
|
||||
[DbContext(typeof(ApplicationDbContext))]
|
||||
[Migration("20180522013323_AddDateLastViewedColumn")]
|
||||
partial class AddDateLastViewedColumn
|
||||
{
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "2.0.1-rtm-125")
|
||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||
|
||||
modelBuilder.Entity("SieveTests.Entities.Post", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd();
|
||||
|
||||
b.Property<int>("CommentCount");
|
||||
|
||||
b.Property<DateTimeOffset>("DateCreated");
|
||||
|
||||
b.Property<DateTime>("DateLastViewed")
|
||||
.HasColumnType("datetime");
|
||||
|
||||
b.Property<int>("LikeCount");
|
||||
|
||||
b.Property<string>("Title");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("Posts");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SieveTests.Migrations
|
||||
{
|
||||
public partial class AddDateLastViewedColumn : Migration
|
||||
{
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddColumn<DateTime>(
|
||||
name: "DateLastViewed",
|
||||
table: "Posts",
|
||||
type: "datetime",
|
||||
nullable: false,
|
||||
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
|
||||
}
|
||||
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropColumn(
|
||||
name: "DateLastViewed",
|
||||
table: "Posts");
|
||||
}
|
||||
}
|
||||
}
|
@ -29,6 +29,9 @@ namespace SieveTests.Migrations
|
||||
|
||||
b.Property<DateTimeOffset>("DateCreated");
|
||||
|
||||
b.Property<DateTime>("DateLastViewed")
|
||||
.HasColumnType("datetime");
|
||||
|
||||
b.Property<int>("LikeCount");
|
||||
|
||||
b.Property<string>("Title");
|
||||
|
Loading…
Reference in New Issue
Block a user