DateTime.ToLocalTime
Linq to EF ではサポートされていません。
代替手段は何ですか?アイデアが不足しています。
DateTime.ToLocalTime
Linq to EF ではサポートされていません。
代替手段は何ですか?アイデアが不足しています。
Linqクエリ内で.ToLocalTime()を使用する代わりに、パラメーターに対してクエリ外で反対の変換を使用します。
var dateUniversal = dateParam.ToUniversalTime();
var query = myTable.Where( t => t.DateTime > dateUniversal );
拡張機能を組み合わせて使用し、アプリのフロントエンドから渡された値が LocalTime になるようにしました。したがって、レポートの開始日パラメーターと終了日パラメーターのように、2 つの日付時刻がある場合は、それらをそこに配置します..ユーザーが LocalTime で送信できるようにします..次に、コントローラーのバックエンド部分に.. Linq to Entities クエリで sdate 変数と edate 変数を使用します。静的ヘルパー クラスにスローした静的拡張メソッド。1年以上遅れてすみません。: )
DateTime sdate = CalcHelper.AbsoluteStart(model.StartDate);
DateTime edate = CalcHelper.AbsoluteEnd(model.EndDate);
public static DateTime AbsoluteStart(this DateTime dateTime)
{
return dateTime.Date.ToUniversalTime();
}
public static DateTime AbsoluteEnd(this DateTime dateTime)
{
return AbsoluteStart(dateTime).AddDays(1).AddTicks(-1).ToUniversalTime();
}
原則として、日付と時刻を UTC でデータベースに保存する必要があります。
データベースに保存する前に、コード内でローカルの日付/時刻を UTC に変換します。
同様に、データベースで UTC から現地時間を表示する必要がある場合は、データベースのフェッチ後にコードで変換します。
次のように試すことができます:
var promotions = _promotionService.GetAll(
x => (DbFunctions.TruncateTime(x.CreatedDate.Value) >= viewModel.GTXFromDate.Date)
&& (DbFunctions.TruncateTime(x.CreatedDate.Value) <= viewModel.GTXToDate.Date));
サーバーからタイムゾーン オフセットを取得すると、EntityFunctions を使用して linq クエリにオフセットを適用できる場合があります。
var offset = TimeZoneInfo.Local.BaseUtcOffset.TotalMinutes;
var result = db.Dates.Where(a =>
EntityFunctions.DiffDays(EntityFunctions.AddMinutes(a.Date, offset), DateTime.Now) == 0);
比較のために DateTime を String に変換します。次に例を示します。
const string DATE_FORMAT = "yyyy/MM/dd";
var query = sampleTable.Where(x => x.DateTime.ToString(DATE_FORMAT) > DateTime.Now.ToString(DATE_FORMAT));
この質問の解決策を見つけました
public partial class Person {
partial void OnLoaded() {
this._BirthDate = DateTime.SpecifyKind(this._BirthDate, DateTimeKind.Utc);
}
}