Linq To Entities 的自定义扩展方法

发布于 2024-12-03 09:43:55 字数 742 浏览 1 评论 0原文

我想使用 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 方法)。如果可以,我该如何实施?
谢谢。

I'd like to make a query to my SQL Server 2008 R2 database using Linq-To-Entities.
I use Entity Framework 4.1 (Code-First)
the query has to compare the entities' hashed values with a paramater as follows:

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

But I can only use core extension methods and CLR methods defined for the EF provider.
So I'm trying to translate my HashCode() method to something that L2E understands just before execution.

FYI, HashCode's implementation is not complex. something like:

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

I know I can retrieve all the entities as enumerable and check them in my code (Linq To Objects), But that's be a disaster considering the amount of data I'm about to retrieve that way.

Is it doable at all (for GetHashCode method). If so, how can I implement it?
Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

森罗 2024-12-10 09:43:55

你能写 SQL 来做到这一点吗?我不明白如何(没有 SQL 函数,这需要修改数据库模式,你说你不能这样做)。

如果你不能在 SQL 中做到这一点,那么你当然也不能在 L2E 中做到这一点,因为所有 L2E 都被翻译为 SQL。

另一方面,如果您可以使用 SQL 来完成此操作,那么最快的解决方案可能是ObjectContext.ExecuteStoreQuery

Could you write SQL to do this? I don't see how (without a SQL function, which requires modifying DB schema, which you say you can't do).

If you can't do it in SQL, you certainly can't do it in L2E, since all L2E is translated to SQL.

On the other hand, if you can do it in SQL, the fastest solution is probably ObjectContext.ExecuteStoreQuery.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文