2017-09-07 10 views
2

整数から行を注文する+今日から経過した日数です。Entity Frameworkで2日間の日数を取得します。

しかし、この:ASPの等価何DbFunctions.DiffDays

:これを行うことが可能であった.NET Frameworkの

The LINQ expression 'orderby' could not be translated and will be evaluated locally.

var now = DateTime.UtcNow; 

db.Items.OrderBy(x => x.SomeInteger + (x.Date - now).Days); 

は、次のような警告を与えます。 NETコア?

+0

さて、苦痛に見えますが、これはEF githにあります。このように使用

protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); builder.HasDbFunction(typeof(DbUtility) .GetMethod(nameof(DbUtility.DateDiff))) .HasTranslation(args => { var newArgs = args.ToArray(); newArgs[0] = new SqlFragmentExpression((string)((ConstantExpression)newArgs[0]).Value); return new SqlFunctionExpression( "DATEDIFF", typeof(int), newArgs); }); } 

ub https://github.com/aspnet/EntityFrameworkCore/issues/9549 –

+0

通常、order by句は列名です。 EFで書かれる前に、どのようにこれをSQLクエリで書くか教えてください。 – Win

答えて

1

githubでこの問題を公開しましたが、修正されているように見え、2.1で利用可能になります。

https://github.com/aspnet/EntityFrameworkCore/issues/10468

回避策:ApplicationDbContext

public static class DbUtility 
{ 
    public static int DateDiff(string diffType, DateTime startDate, DateTime endDate) 
    { 
     throw new InvalidOperationException($"{nameof(DateDiff)} should be performed on database"); 
    } 
} 

DbUtility.DateDiff("day", x.DateAdded, now) 
関連する問題