Задача перевода функции LINQ - PullRequest
0 голосов
/ 11 марта 2011

У меня проблема с переводом моей функции, когда я пытаюсь выбрать данные из таблицы. Итак, теперь у меня есть около 130000 строк со «словами», и они написаны на моем русском языке:

привет, пока, москва.

Но мне нужно перевести эти слова на английский и найти их в базе данных с их английской транскрипцией:

привет = привет, пока = пока, москва = москва.

Я просто делаю Заменить ('п' -> 'p', 'т' -> 't').

Но когда я пытаюсь выполнить метод расширения для свойства таблицы LINQ, у меня возникает исключение, и я знаю это. Итак, как я могу использовать функцию для свойства в

.Where(t=> FunctionReplaceName(t.Name))?

Thx.

public static string Translate(this string stringToTranslate)
{
    string[] kirArray = { "А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я", ",", ".", " ", "(", ")" };
    string[] latArray = { "A", "B", "V", "G", "D", "E", "JO", "ZH", "Z", "I", "IJ", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "H", "TZ", "CH", "SH", "SH", "", "JY", "", "JE", "JU", "JA", "", "", "-", "", "" };
    stringToTranslate = stringToTranslate.ToUpper();

    for (int i = 0; i < kirArray.Length; i++)
        if (stringToTranslate.IndexOf(kirArray[i]) != -1)
            stringToTranslate = stringToTranslate.Replace(kirArray[i], latArray[i]);

    return stringToTranslate.ToLower();
}

Ответы [ 2 ]

1 голос
/ 11 марта 2011

Во-первых, ваш предикат where недействителен:

 .Where(t=> FunctionReplaceName(t.Name))

Это недопустимое предложение where. Нужно вернуть бул. У вас есть что-то подобное?

.Where(t=> FunctionReplaceName(t.Name) == inputName)

Если это так, вы делаете это задом наперед - вы (синтаксически) пытаетесь преобразовать значение в БД, используя вашу функцию. Вместо этого вы должны сделать, как вы пытались, "to translate this words on english and find them in database with their english transcription." Вы должны иметь:

.Where(t=> t.Name == FunctionReplaceName(inputName))

Я думаю , что должно сработать, но, возможно, преобразование sql может по-прежнему препятствовать вызову вашей функции, и в этом случае вам следует вызвать вашу функцию для значения (inputName) и сохранить ее в строковой переменной перед звонком Where.

0 голосов
/ 11 марта 2011

LINQ-to-SQL не знает, как перевести FunctionReplaceName в SQL, поэтому выдает ошибку.

Попробуйте заменить ее следующим:

.ToList().Where(t=> FunctionReplaceName(t.Name));

Примечаниечто это вытянет все в память из базы данных, поэтому примените другие .Where предложения до this.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...