1

多くのクエリで使用する必要がある LINQ コードのスニペットがあります。

let catchmentId = Convert.ToInt32(
        phy.PhysicalProperty_binData.Substring(offset + 3, 1) +
        phy.PhysicalProperty_binData.Substring(offset + 2, 1) +
        phy.PhysicalProperty_binData.Substring(offset + 1, 1) +
        phy.PhysicalProperty_binData.Substring(offset, 1))

これは SQL にうまく変換されます (そして、私の特定のニーズに対してはパフォーマンスが向上します) が、クエリの見栄えが悪くなります。これを冗長にする方法はありますか?おそらく、 Expression> を返す拡張メソッドですか? クライアント側にデータを取得したくないことに注意してください (サーバー上で SQL として実行します)。これにより、少し複雑になります。例えば:

let catchmentId = phy.PhysicalProperty_binData.AnExtensionMethodHere<int>(offset)

これを行う拡張メソッドを作成しようとしましたが、プロバイダーは単にその呼び出しを無視するか、その呼び出しを SQL に変換する方法がわからないことを示す例外をスローします。SQL ジェネレーターを何らかの方法で拡張して、これを実行したり、同じ SQL を生成する方法で何かを提供したりできますか?

前もって感謝します!

4

3 に答える 3

1

Entity モデルでカスタム SQL 関数をマップできます。

http://msdn.microsoft.com/en-us/library/dd456812(v=vs.103).aspx

于 2013-09-19T17:20:36.260 に答える
1

このページのリンクは、カスタム属性を使用して拡張メソッドをデータベース内のユーザー定義関数に結び付ける方法を示しています。

もちろん、これは、拡張メソッドが実行したいのと同じロジックを実行するために、SQL でユーザー定義関数を作成する必要があることを意味します。

もう 1 つのオプションは、拡張メソッドで を生成し、 LINQKitExpressionを使用してクエリ ツリーを解析し、その式の off への呼び出しを見つけ、その式をクエリにインライン化することです。.Compile()

于 2013-09-19T17:46:43.123 に答える