我有一个表(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))
答案 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查询。
我创建了一个新的小班级
公共类SmallClass { public int Id {get;组; } public String Name {get;组; } }
在我实施下一个逻辑之后:
...
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;
我还在工作......