0

手がかりが得られるかどうかを知る必要があります。フィルタリングを実行するために、適切な Oracle ステートメントに対して ODP.NET マネージド ドライバー (現在のバージョン) を介して Entity Framework 6 (LINQ to Entities) を介して評価される式ツリーを構築しようとしています。これは、文字列 <> nvarchar2 データ型に対して完全に機能します。含む検索の出力は次のようになります。

Select * 
[...]
FROM "MYSCHEMA"."MYTABLE" "Extent1"
WHERE ("Extent1"."ANVARCHAR2COLUM" LIKE '%givenStrValueToFind%') 

SQLステートメントのこの行はOracleクエリに対して有効であり、「08」を含むすべての日付を返すため、DateTime <> Timestamp(6)に対して同じ結果を取得したいと考えています。

select * from "MYSCHEMA"."MYTABLE" where ATIMESTAMP6COLUMN like '%08%';

私は Expression Trees に慣れていないので、深く掘り下げる前に、(グーグルでいろいろと試した後) まず、これが可能かどうかを知る必要があります。もしそうなら、どうすればこれを最もよく達成できるでしょうか? DateTime と DateTime に定義されたメソッドが含まれていないので? 多分拡張メソッドを提供しますか?そして、データベースに対して直接クエリを実行したくありません。

おそらく、指定されたデータベースのデータ型を「フック解除」するためのヒントがあればいいでしょう... Thx。

4

2 に答える 2

0

理解できたかどうかわかりません。とにかく、メモリ内の DB 負荷を避けるために式ツリーを構築する必要はありません。LINQ は式から式ツリーを構築し、EF は式ツリーを (EF プロバイダーを使用して) SQL ステートメントに変換し、DB でクエリを実行します。

あなたの場合、LINQクエリは次のようになります

myContext.MYTABLE.Where(e => e.ATIMESTAMP6COLUMN.Contains("08").ToList();

編集

変換:

.ToString() を使用できます。これは標準関数 (すべての EF プロバイダーで使用できる関数) である必要があります。

その他の DateTime 関連の関数:

他の正規関数 (日付部分を取得できる日付に関するものがあります) や非正規関数 (EF Provider for oracle にのみ実装されている関数) を調べることができます。

参考文献:

正規関数https://msdn.microsoft.com/en-us/library/vstudio/bb738626(v=vs.100).aspx

実際、Oracle の非正規関数は見つかりません。
必要な場合は、別の質問をすることをお勧めします。

于 2015-08-18T10:55:37.123 に答える