Linq к Sql нечувствительное к регистру равенство

Для [1 113].Net Платформы до 3,5 это должно работать:

Регулярное выражение, соответствующее, должно получить Вас часть пути. Вот отрывок с помощью System.IO.Path.InvalidPathChars постоянный;

bool IsValidFilename(string testName)
{
    Regex containsABadCharacter = new Regex("[" 
          + Regex.Escape(System.IO.Path.InvalidPathChars) + "]");
    if (containsABadCharacter.IsMatch(testName)) { return false; };

    // other checks for UNC, drive-path format, etc

    return true;
}

Для [1 114].Net Платформы после 3.0 это должно работать:

http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidpathchars (v=vs.90) регулярное выражение .aspx

, соответствующее, должен получить Вас часть пути. Вот отрывок с помощью System.IO.Path.GetInvalidPathChars() постоянный;

bool IsValidFilename(string testName)
{
    Regex containsABadCharacter = new Regex("["
          + Regex.Escape(new string(System.IO.Path.GetInvalidPathChars())) + "]");
    if (containsABadCharacter.IsMatch(testName)) { return false; };

    // other checks for UNC, drive-path format, etc

    return true;
}

, Как только Вы знаете, что, необходимо также проверить на различные форматы, например, c:\my\drive и \\server\share\dir\file.ext

5
задан zsharp 5 December 2009 в 23:07
поделиться

3 ответа

Я думаю, вы получите противоречивые результаты в зависимости от того, на что указывает ваша переменная db и где на самом деле выполняется сравнение. Если это возможно, linq построит запрос и отправит его на SQL-сервер. Похоже, вы можете принудительно ввести регистр без учета регистра, вызвав

where p.UserName.ToLower()=username.ToLower()
4
ответ дан 14 December 2019 в 04:39
поделиться

Ваш пример запроса будет примерно таким:

select [t0] .col1, [t0] .col2, ..., [t0] .coln из [schema]. [People] где [t0] .UserName = @ p0

... значение переменной имени пользователя будет передано в переменную @ p0 sql. Таким образом, чувствительность к регистру, чувствительность к акценту и т. Д. Контролируется сопоставлением, которое вы настроили для своего экземпляра SQL Server / db / table / column для использования. Если нигде не указано иное, используется сопоставление по умолчанию для баз данных или экземпляра БД, но сопоставление может быть указано вплоть до уровня столбца.

Большинство людей запускают SQL Server с сопоставлением без учета регистра (CI), но, как я уже сказал выше, его можно переопределить в БД, поэтому вам просто нужно проверить, какое сопоставление у вас там.

Это отличается от того, если вы выполняете то же самое, что и запрос L2O (linq to objects), в этом случае - По умолчанию используется чувствительность, и вам придется сделать ее нечувствительной к регистру, используя строку.

3
ответ дан 14 December 2019 в 04:39
поделиться

Это зависит от базы данных. SQL Server 2008 обрабатывает строки как нечувствительные к регистру, в том числе когда они используются в выражении индекса. Linq этого не делает.

Прочтите в MSDN или эту статью .

1
ответ дан 14 December 2019 в 04:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: