2016-11-23 3 views
2

私はASP .NET COREにこれを使用すると、私はDbFunctionsを使用することはできませんDbFunctions.TruncateTime LINQ相当

public ActionResult Index() 
    { 
     Dictionary<DateTime?, List<Event>> result; 
     result = (from events in db.Events.Include("Activity") 
         where events.IsActive 
         group events by DbFunctions.TruncateTime(events.DateTimeFrom) into dateGroup 
         select new { EventDate = dateGroup.Key, Events = dateGroup.ToList() }).ToDictionary(x => x.EventDate, x => x.Events); 

     return View(result); 
    } 

私の.NETアプリケーションで、以下の機能LINQを持っています。 Microsoft.EntityFrameworkCoreで動作させるには、これをどのように書き換えることができますか?私はそれが違いをもたらす場合はSQLiteを使用しています。

答えて

3

DbFunctionsはEFコアではまだサポートされていません。ただし、 "Raw SQLクエリ"を使用することができます。何らかの理由で、後はサポートされていないため

あなたは"Raw Sql Queries" here

のドキュメントを見つけることができますし、また、あなたがEF6 DbFunctions.TruncateTimeでEFコア

+2

100追跡のリンクを提供するために!今、私は.NETのコア2.0はEF.Functionsを持っていることがわかります。 –

7

ためDbFunctionsためhereを追跡することができますが、代わりにDateTime.Date財産を使用されています。

EFコアでは、DateTime.Dateが正しく認識され、正しく翻訳されているため、前者は必要ありません。一般的な経験則として、常に対応するCLRメソッド/プロパティを試してみてください(もしあれば)、それがどのようにSQLとに変換しているかどうかを確認して

group events by events.DateTimeFrom.Date into dateGroup 

は残念ながら、サポートされているもののない文書(まだ)ありません。

0

私はこれをラムダでも書き直して、非同期にすることができました。同じように働いているようだ。

var temp = await _context.Events.Where(x => x.IsActive) 
      .Include(a => a.Activity) 
      .GroupBy(x => x.DateTimeFrom.Date) 
      .Select(g => new { EventDate = g.Key, Events = g.ToList() }).ToDictionaryAsync(x => x.EventDate, x => x.Events); 
0

EF Core 2.0では、データベース機能を自分のコンテキストで静的メソッドにマッピングできるようになりました。

ここのセクション「データベースのスカラー関数マッピング」をチェックしてください - https://docs.microsoft.com/en-us/ef/core/what-is-new/