Пользовательский метод расширения для Linq To Entities - PullRequest
2 голосов
/ 08 сентября 2011

Я бы хотел сделать запрос к моей базе данных SQL Server 2008 R2, используя Linq-To-Entities.
Я использую Entity Framework 4.1 (Code-First)
запрос должен сравнить хэшированные значения сущностей с параметром следующим образом:

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

Но я могу использовать только методы расширения ядра и методы CLR, определенные для поставщика EF .
Поэтому я пытаюсь перевести мой метод 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 голосов
/ 08 сентября 2011

Не могли бы вы написать SQL для этого?Я не понимаю, как (без функции SQL, которая требует изменения схемы БД, что, как вы говорите, вы не можете сделать).

Если вы не можете сделать это в SQL, вы, конечно, не можете сделатьэто в L2E, поскольку весь L2E переводится в SQL.

С другой стороны, если вы можете сделать это в SQL, самым быстрым решением, вероятно, будет ObjectContext.ExecuteStoreQuery.

...