Клаузата Where в LINQtoSQL има значение за малки и големи букви?

Искам да проверя дали съществува етикет (чувствителен към малки и главни букви) в таблицата на SQL Server 2005 с помощта на LINQtoSQL. Да кажем, че ако етикетът „BEYONCE“ съществува в етикетите, тогава искам да мога да добавя „beyonce“ или „BeYOnce“, но не и отново „BEYONCE“. Ето LINQ заявката, която написах:

From t In Context.Tags
Where String.Equals(t.Tag, myTag, StringComparison.Ordinal) = True 

Но се казва, че методът „Boolean Equals(System.String, System.String, System.StringComparison)“ няма поддържан превод към SQL. Какъв е другият начин за намиране на етикет, чувствителен към главни и малки букви?


person Marc V    schedule 28.06.2009    source източник
comment
Базата данни чувствителна ли е към малки или малки букви?   -  person Marc Gravell    schedule 28.06.2009


Отговори (2)


Ако базата данни има настройките за сортиране по подразбиране, тогава "blah" и "BLAH" ще бъдат равни. Не мисля, че можете да направите това първоначално с LinqToSQL, но бихте могли да изпълните заявка, която принуждава сортиране на ниво колона... т.е.

Етикет на низ = "beYONCE"; IEnumerable result = db.ExecuteQuery(typeof(Int32), "Select * From Table1 Where Value COLLATE Latin1_General_CS_AS = {0}", етикет);

Тази заявка няма да върне никакви резултати, защото етикетът в таблицата съдържа „beyonce“, а не „beYONCE“. Промяната на тага на низа на „beyonce“ ще върне резултат.

Ако искате да промените опциите за сортиране на вашата база данни, опитайте да прочетете тази статия.

Надявам се това да помогне.

person Community    schedule 28.06.2009
comment
Съпоставянето на това поле е: SQL_Latin1_General_CP1250_CI_AS и полето е дефинирано nvarchar за множество езици, когато заместя COLLATE Latin1_General_CS_AS с SQL_Latin1_General_CP1250_CI_AS, не идентифицира информацията, чувствителна към главни и малки букви - person Marc V; 28.06.2009

Не мисля, че можете да го направите естествено с linqtosql.

Можете да опитате малко от ExecuteExpression и някои чувствителни към главни и малки букви техники. Не е красиво, но трябва да свърши работата.


редактиране Не съм сигурен дали използвате c# или vb, но ето малко C# код. Предполагам, че основната ви таблица се нарича Етикет

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.

person Dan F    schedule 28.06.2009
comment
каква ще бъде SQL заявката за него? Използвам nvarchar(100) за това поле и Collation е: SQL_Latin1_General_CP1250_CI_AS - person Marc V; 28.06.2009