LINQ函数转换问题

时间:2011-03-11 18:37:28

标签: c# linq-to-sql

当我尝试从表中选择数据时,我的翻译功能有问题。所以,现在我有大约130000行“单词”,并且用我的语言写成俄语:

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

但是我需要在英语中翻译这些单词并在数据库中找到它们的英文转录:

привет= privet,пока= poka,москва= moskva。

我只是替换('п' - >'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 个答案:

答案 0 :(得分:1)

首先,你的谓词无效:

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

这不是有效的where子句。它需要返回一个bool。你真的有类似的东西吗?

.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翻译可能仍然在你的函数调用上barf,在这种情况下你应该调用你的函数值(inputName)并存储它调用Where之前的字符串变量。

答案 1 :(得分:0)

LINQ-to-SQL不知道如何将FunctionReplaceName转换为SQL,因此它会给你一个错误。

尝试将其替换为:

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

请注意,这会将所有内容从数据库中提取到内存中,因此在之前应用其他.Where子句