Linq - 与字段的音译值进行比较

时间:2010-04-30 08:50:04

标签: c# linq

我有一个表(sql server)。其中一个列('Name')包含西里尔文值。

从参数i接收值,包含在此字段中,但是已经音译。

我的意思是:'Вася' - > 'Vasya'。我需要首先音译价值领域;

var q = from r in m_DataContext.Table where CTransliteration.Transliterate(r.Name).Contains(trans_text) select r;

m_DataContext.Table.Select(r => r.name=CTransliteration.Transliterate(r.Name))

3 个答案:

答案 0 :(得分:2)

我从未见过“CTransliteration.Transliterate” - 我是否正确地假设这来自您自己的软件/第三方图书馆?

您将DataContext定位的Linq查询转换为SQL,然后在SQL Server上执行。您无法表达要在SQL中运行的查询:CTransliteration.Transliterate不是SQL语言的一部分。

我认为有两种方法可以: a)将查询拆分为在SQL Server上运行的部分,并在.NET中进行音译。对于SELECT,你已经列出了这不是问题:

m_DataContext.Table
 .ToList()
 .Select(r => r.name=CTransliteration.Transliterate(r.Name));

对于WHERE子句,这是一个糟糕的选择,因为您需要将所有内容传输到应用程序服务器,然后进行过滤。

b)将音译功能移动到SQL Server中的CLR函数中,并通过SQL运行查询,而不是Linq。

答案 1 :(得分:1)

您可能会在string.Compare(r.Name, "Your Value", CultureInfo.xxx, CompareOptions.xxx)找到更多运气?

答案 2 :(得分:1)

我解决了2个linq查询。

  1. 我创建了一个新的小班级

    公共类SmallClass { public int Id {get;组; } public String Name {get;组; } }

  2. 在我实施下一个逻辑之后:

    ...

    var q = from r in GetAllTable() select new SmallClass{ Id = r.ID, Name = CTransliteration.Transliterae(r.Name)) };
    
    
    var rr = from r in q where r.Name.Contains(trans_text) select r;
    

    我还在工作......