2

我想使用 Linq-To-Entities 对我的 SQL Server 2008 R2 数据库进行查询。
我使用实体框架 4.1(代码优先)
,查询必须将实体的散列值与参数进行比较,如下所示:

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

但是我只能使用为 EF 提供者定义的核心扩展方法和 CLR 方法
因此,我试图将我的HashCode()方法转换为 L2E 在执行之前能够理解的东西。

仅供参考,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 模式,你说你不能这样做)。

如果在 SQL 中做不到,那么在 L2E 中肯定做不到,因为所有 L2E 都被翻译成 SQL。

另一方面,如果你可以在 SQL 中做到这一点,最快的解决方案可能是ObjectContext.ExecuteStoreQuery.

于 2011-09-08T13:25:54.853 回答