【问题标题】:how to compare string in lambda expression如何比较 lambda 表达式中的字符串
【发布时间】:2011-07-06 14:06:23
【问题描述】:

我有一个问题希望得到任何帮助。

背景 - 我有一个包含字符串的数据库(即 StackOverFlow),我需要将传入的值与该字符串进行比较并使其区分大小写。

现在我有一个到数据库的连接(使用 EF 4)、一个 IRepo<T> 接口(我用来访问表)和一个返回 IQueryable<table> 并接受 @987654324 的 FindAllMatching 方法@参数。

回购类:

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 值,但没有什么可以比较大小写。

如果您需要更多信息,请随时询问。

谢谢,

提姆

【问题讨论】:

    标签: c# string lambda comparison


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      您可能希望查看此question 以获得可能的答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-13
        • 1970-01-01
        • 2012-08-23
        • 2012-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多