Для [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 это должно работать:
, соответствующее, должен получить Вас часть пути. Вот отрывок с помощью 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
Я думаю, вы получите противоречивые результаты в зависимости от того, на что указывает ваша переменная db и где на самом деле выполняется сравнение. Если это возможно, linq построит запрос и отправит его на SQL-сервер. Похоже, вы можете принудительно ввести регистр без учета регистра, вызвав
where p.UserName.ToLower()=username.ToLower()
Ваш пример запроса будет примерно таким:
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), в этом случае - По умолчанию используется чувствительность, и вам придется сделать ее нечувствительной к регистру, используя строку.
Это зависит от базы данных. SQL Server 2008 обрабатывает строки как нечувствительные к регистру, в том числе когда они используются в выражении индекса. Linq этого не делает.
Прочтите в MSDN или эту статью .