我想检查使用LINQtoSQL的SQL Server 2005表中是否存在Tag(区分大小写)。假设标签中存在标签'BEYONCE',那么我希望我可以添加'beyonce'或'BeYOnce'而不是'BEYONCE'。这是我写的LINQ查询:
From t In Context.Tags
Where String.Equals(t.Tag, myTag, StringComparison.Ordinal) = True
但它说Method'Boolean Equals(System.String,System.String,System.StringComparison)'没有支持的SQL转换。找到区分大小写的标签的另一种方法是什么?
答案 0 :(得分:3)
如果数据库具有默认的排序规则设置,则'blah'和'BLAH'将相等。我不认为你可以用LinqToSQL本地做这个,但你可以执行一个强制在列级别进行整理的查询......即
String tag =“beYONCE”; IEnumerable result = db.ExecuteQuery(typeof(Int32), “Select * From Table1 Where Value COLLATE Latin1_General_CS_AS = {0}”,tag);
该查询不会返回任何结果,因为表中的标签中包含'beyonce'而不是'beYONCE'。将字符串标记更改为'beyonce'将返回结果。
如果您想更改数据库的整理选项,请尝试阅读this文章。
希望这有帮助。
答案 1 :(得分:0)
我认为你不能用linqtosql原生地做这件事。
您可以尝试一些ExecuteExpression和一些case sensitive techniques。它不漂亮,但它应该完成工作。
修改强> 不确定你是使用c#还是vb,但这里有一些c#代码。 我假设您的基表名为Tag
IEnumerable<Tag> matches = Context.ExecuteQuery<Tag>(
"Select * from Tag where Tag = {0} COLLATE Latin1_General_CS_AS", myTag
);
哎呀,只是为了完整性,这里也是在vb.net中: - )
dim matches as IEnumerable(Of Tag) = Context.ExecuteQuery(Of Tag)( _
"Select * from Tag where Tag = {0} COLLATE Latin1_General_CS_AS", myTag _
)
这与Chalkey's回答大致相同。