как сравнить строку в лямбда-выражении - PullRequest
0 голосов
/ 06 июля 2011

У меня есть проблема, с которой я был бы признателен за любую помощь.

Справочная информация - у меня есть база данных, которая содержит строку (т.е. - StackOverFlow), и мне нужно сравнить переданное значение с этой строкой и сделатьон чувствителен к регистру.

Сейчас у меня есть соединение с базой данных (используя EF 4), интерфейс IRepo<T> (который я использую для доступа к таблице) и метод FindAllMatching, который возвращает IQueryable<table> и принимает параметр Expression<Func<tableName, bool>> expression.

Класс репо:

public class TableRepo : IRepo<table>{
  private EF4Entity _dc = new EF4Entity();
  public IQueryable<table> FindAllMatching(Expression<Func<table, bool>> expression)
  {
    return _dc.table.Where(expression);
  }
}

Телефонный код:

public class CallingClass
{
  public void CallingMethod(string enteredStringFromTextBoxOnFrontEnd)
  {
    var tableDB = new TableRepo();
    var returnValue = tableDB.FindAllMatching(x => x.ColumnInTableThatHoldsString.CompareTo(enteredStringFromTextBoxOnFrontEnd) ==0);
  }
}

Прямо сейчас, когда я передаю строку, котораяполностью соответствует тому, что находится в таблице, но в случае (stackoverflow, в отличие от StackOverFlow) returnValue фактически возвращает строку из таблицы.Если переданное значение не соответствует значению, содержащемуся в таблице базы данных, я хочу, чтобы оно возвращало ноль или счетчик нуля.

Я попытался сделать .Equals(enteredStringFromTextBoxOnFrontEnd, StringComparison.OrdinalIgnoreCase) и все остальные StringComparison значения и ничто не сравнивает регистр.

Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь спрашивать.

Спасибо,

Тим

Ответы [ 2 ]

1 голос
/ 06 июля 2011

Linq To Sql использует правила сравнения баз данных.

Вам необходимо добавить дополнительный IEnumerable. Где в конце сделать локальную фильтрацию результата

var returnValue = (ItableDB.FindAllMatching(x => x.ColumnInTableThatHoldsString == enteredStringFromTextBoxOnFrontEnd) as IEnumerble<TableRepo>).Where(x => x.ColumnInTableThatHoldsString == enteredStringFromTextBoxOnFrontEnd);
1 голос
/ 06 июля 2011

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

Возможно, вы захотите увидеть этот вопрос для возможных ответов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...