我有一个问题,我将不胜感激任何帮助。
后台 - 我有一个包含字符串的数据库(即 - 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
值,并且没有比较大小写。
如果您需要更多信息,请不要犹豫。
谢谢,
添
答案 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);