如何比较lambda表达式中的字符串

时间:2011-07-06 05:52:45

标签: c# string lambda comparison

我有一个问题,我将不胜感激任何帮助。

后台 - 我有一个包含字符串的数据库(即 - 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实际上从表中返回一行。如果传入的值与数据库表中包含的值完全不匹配,我希望它返回null或计数为零。

我尝试过.Equals(enteredStringFromTextBoxOnFrontEnd, StringComparison.OrdinalIgnoreCase)和所有其他StringComparison值,并且没有比较大小写。

如果您需要更多信息,请不要犹豫。

谢谢,

2 个答案:

答案 0 :(得分:1)

我认为您会发现这不是您的代码的问题,而是您的数据库。我假设您正在使用某种SQL Server。默认情况下,安装SQL Server时,它对所有文本查询都不区分大小写。

您可能希望看到此question以获取可能的答案。

答案 1 :(得分:1)

Linq To Sql使用数据库比较规则。

你需要在最后添加一个额外的IEnumerable.Where来对结果进行局部过滤

var returnValue = (ItableDB.FindAllMatching(x => x.ColumnInTableThatHoldsString == enteredStringFromTextBoxOnFrontEnd) as IEnumerble<TableRepo>).Where(x => x.ColumnInTableThatHoldsString == enteredStringFromTextBoxOnFrontEnd);
相关问题