2011-07-06 20 views
0

私は何か助けていただければ幸いです。ラムダ式の文字列を比較する方法

背景 - 文字列(つまり、StackOverFlow)を保持するデータベースがあり、渡された値をその文字列と比較して大文字と小文字を区別する必要があります。

今私は(EF 4を使用)、データベースへの接続、(Iテーブルにアクセスするために使用)IRepo<T>インターフェースとIQueryable<table>を返し、Expression<Func<tableName, bool>> expressionパラメータを取り込む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); 
    } 
} 

呼び出すコード:私は反対に、stackoverflowの(あらゆる方法でなく、場合には、テーブルにあるものと一致する文字列を渡し今

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

、 StackOverFlowに)returnValue実際にテーブルから行を返します。渡された値がデータベーステーブルに含まれている値と正確に一致しない場合は、nullまたはゼロのカウントを返します。

私は.Equals(enteredStringFromTextBoxOnFrontEnd, StringComparison.OrdinalIgnoreCase)と他のすべてのStringComparison値を試してみましたが、何も比較しません。

さらに詳しい情報が必要な場合は、お気軽にお問い合わせください。

は、私はあなたがこれはあなたのコードではなく、データベースとの問題ではないことを見つけると思います

ティム

答えて

1

Linq To Sqlはデータベース比較ルールを使用します。あなたは結果

var returnValue = (ItableDB.FindAllMatching(x => x.ColumnInTableThatHoldsString == enteredStringFromTextBoxOnFrontEnd) as IEnumerble<TableRepo>).Where(x => x.ColumnInTableThatHoldsString == enteredStringFromTextBoxOnFrontEnd); 
の局所的なフィルタリングを行うために末尾に余分なIEnumerable.Whereを追加する必要が

1

、ありがとうございます。私はあなたがSQL Serverのいくつかの風味を使用していると推定しています。既定では、SQL Serverをインストールすると、すべてのテキストクエリで大文字と小文字を区別しません。

可能性のある回答はquestionです。