Linq To Entities的自定义扩展方法

时间:2011-09-08 06:55:29

标签: entity-framework linq-to-entities entity-framework-4.1 linq-expressions linq-extensions

我想使用Linq-To-Entities查询我的SQL Server 2008 R2数据库 我使用Entity Framework 4.1(Code-First)
查询必须将实体的散列值与参数进行比较,如下所示:

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

但我只能使用core extension methods and CLR methods defined for the EF provider 所以我试图将我的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方法)。如果是这样,我该如何实施呢? 谢谢。

1 个答案:

答案 0 :(得分:0)

你能写SQL来做到这一点吗?我没有看到(没有SQL函数,这需要修改DB模式,你说你不能这样做。)

如果你不能在SQL中这样做,你当然不能在L2E中这样做,因为所有的L2E都被翻译成了SQL。

另一方面,如果您可以在SQL中执行此操作,则最快的解决方案可能是ObjectContext.ExecuteStoreQuery