区分大小写在LINQ to SQL中的哪些条款?

时间:2009-06-28 11:23:06

标签: linq sql-server-2005 linq-to-sql

我想检查使用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转换。找到区分大小写的标签的另一种方法是什么?

2 个答案:

答案 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回答大致相同。