Question

Je voudrais faire une requête à ma base de données SQL Server 2008 R2 à l'aide de Linq-to-entities.
J'utilise Entity Framework 4.1 (code-First)
La requête doit comparer les valeurs de hachage des entités avec un paramater comme suit:

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

Mais je ne peux que l'utiliser Méthodes d'extension de base et méthodes CLR définies pour le fournisseur EF.
Alors j'essaye de traduire mon HashCode() Méthode pour quelque chose que L2E comprend juste avant l'exécution.

FYI, l'implémentation de HashCode n'est pas complexe. quelque chose comme:

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

Je sais que je peux récupérer toutes les entités comme énumérables et les vérifier dans mon code (linq aux objets), mais c'est une catastrophe compte tenu de la quantité de données que je suis sur le point de récupérer de cette façon.

Est-ce faisable du tout (pour GetHashCode méthode). Si oui, comment puis-je l'implémenter?
Merci.

Était-ce utile?

La solution

Pourriez-vous écrire SQL pour faire cela? Je ne vois pas comment (sans une fonction SQL, qui nécessite de modifier le schéma DB, ce que vous dites que vous ne pouvez pas faire).

Si vous ne pouvez pas le faire dans SQL, vous ne pouvez certainement pas le faire en L2E, car tout L2E est traduit en SQL.

D'un autre côté, si vous boîte Faites-le en SQL, la solution la plus rapide est probablement ObjectContext.ExecuteStoreQuery.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top