1. ホーム
  2. entity-framework

[解決済み] 指定された型メンバー 'Date' は LINQ to Entities Exception でサポートされていません。

2022-10-18 09:35:46

質問

以下の記述を実行中に例外が発生しました。

 DateTime result;
 if (!DateTime.TryParse(rule.data, out result))
     return jobdescriptions;
 if (result < new DateTime(1754, 1, 1)) // sql can't handle dates before 1-1-1753
     return jobdescriptions;
 return jobdescriptions.Where(j => j.JobDeadline.Date == Convert.ToDateTime(rule.data).Date );

例外

The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

例外が何を意味するかは分かっていますが、それを取り除く方法が分かりません。何かいい方法はありませんか?

どのように解決するのですか?

LINQ to Entitiesは、同等のSQLがないため、ほとんどの.NET Dateメソッド(使用したキャストを含む)をSQLに変換することはできません。

解決策は、LINQ ステートメントの外側で Date メソッドを使用し、その後、値を渡すことです。Convert.ToDateTime(rule.data).Date がエラーを引き起こしているように見えます。

DateTimeプロパティでDateを呼び出すこともSQLに変換できないので、回避策として、.Year .Month と .Day プロパティを比較することで、これらは整数だけなのでLINQに変換できます。

var ruleDate = Convert.ToDateTime(rule.data).Date;
return jobdescriptions.Where(j => j.Deadline.Year == ruleDate.Year 
                       && j.Deadline.Month == ruleDate.Month 
                       && j.Deadline.Day == ruleDate.Day);