2

Linq-To-Entitiesを使用してSQLServer2008R2データベースにクエリを実行したいと思います。
私はEntityFramework4.1(Code-First)
を使用しており、クエリはエンティティのハッシュ値を次のようにパラメーターと比較する必要があります。

myContext.Messages.Where(m => HashCode(m.MessageId) % 10000 == myValue)  

ただし、EFプロバイダー用に定義されたコア拡張メソッドとCLRメソッドしか使用できません。そのため、実行直前にL2Eが理解できるメソッド
に変換しようとしています。HashCode()

参考までに、HashCodeの実装は複雑ではありません。何かのようなもの:

public int HashString(string text)
{
    int hash = 23;
    foreach (char c in text)
    {
        hash = hash * 31 + c;
    }
    return hash;
}

すべてのエンティティを列挙可能として取得し、コード(Linq To Objects)で確認できることはわかっていますが、その方法で取得しようとしているデータの量を考えると、これは大変なことです。

それはまったく実行可能ですか(GetHashCodeメソッドの場合)。もしそうなら、どうすればそれを実装できますか?
ありがとうございました。

4

1 に答える 1

0

これを行うためにSQLを記述できますか?方法がわかりません(SQL関数がないと、DBスキーマを変更する必要がありますが、これはできません)。

すべてのL2EがSQLに変換されるため、SQLで実行できない場合は、L2Eで実行できないことは確かです。

一方、SQLでそれを実行できる場合、最速の解決策はおそらくObjectContext.ExecuteStoreQueryです。

于 2011-09-08T13:25:54.853 に答える