コンテキストを提供するために、jqGridを使用して日時フィールドでサーバー側の検索を実行し、時間部分のサーバー側を切り捨ててから、ストアドプロシージャを介して結果をフェッチしています。これは、System.Dynamic.Linqを使用して実行されています。これは、この質問に従って少し変更しました。私はEF6コードファーストアプローチを使用しています。コードの関連部分は次のようになります。
//For matching date instead of datetime values
if (wc.Clause.Contains("Date"))
{
wc.Clause = wc.Clause.Replace("DeliveryDate", "DbFunctions.TruncateTime(DeliveryDate)");
}
results = dataFileDB.Database.SqlQuery<Document>("exec [dbo].[sp_getDocumentDetails]").AsQueryable().Where(wc.Clause, wc.FormatObjects);
私が抱えている問題は、クエリがストアドプロシージャを使用してフェッチされるため、最後の行に次のような例外が発生することです。
System.NotSupportedException:この関数は、LINQからエンティティに対してのみ呼び出すことができます。System.Data.Entity.DbFunctions.TruncateTime(Nullable`1 dateValue)で
ラムダクエリを使用してエンティティ自体から直接フェッチし、where句フィルターを適用した他の場所では、フィルター処理は正しく行われます。
私がやろうとしていたこと(そしてこれが可能かどうかはわかりませんが...)は、results
変数に対してエンティティクエリを実行し、その変数にwhere句を適用しましたが、運がありませんでした。これは正しい方法ですか、それとも私が取ることができる別のアプローチがありますか?
前もって感謝します!
了解しました...私は物事を複雑にしすぎていました。
ストアドプロシージャを介してフィールドを返すときDateTime
に、Date
フィールドをフィールドに変換しました。そうすることで、DbFunctions.TruncateTime
メソッドを使用する必要がなくなり、問題が解決しました。
これが他の誰かに役立つことを願っています!
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加