OK、かなり変わった理由で Entity Framework クエリから LIKE キーワードを使用したい -等号演算子を使用する場合よりも正確に文字列を照合したい。
equals 演算子は、一致する文字列をスペースで自動的に パディングして、実際に等しいORcol = 'foo '
の行を返すようにするため、末尾の空白を強制的に考慮したいのですが、LIKE 演算子は実際にそれを行います。col
'foo'
'foo '
.StartsWith
クエリで、.EndsWith
、およびを使用して、Entity Framework に LIKE 演算子を強制的に使用させることができることを私は知ってい.Contains
ます。ただし、予想されるように、これにより EF は、クエリされたテキストをワイルドカード%
文字でプレフィックス、サフィックス、および囲みます。ワイルドカード文字を追加せずに、SQL で LIKE 演算子を直接使用して、私のクエリの文字列と一致させるように実際に Entity Framework を取得する方法はありますか? 理想的には、次のようになります。
string usernameToMatch = "admin ";
if (context.Users.Where(usr => usr.Username.Like(usernameToMatch)).Any()) {
// An account with username 'admin ' ACTUALLY exists
}
else {
// An account with username 'admin' may exist, but 'admin ' doesn't
}
これを直接行う方法が見つかりません。今、私が考えることができる最高のものは、このハックです:
context.Users.Where(usr =>
usr.Username.StartsWith(usernameToMatch) &&
usr.Username.EndsWith(usernameToMatch) &&
usr.Username == usernameToMatch
)
より良い方法はありますか?PATINDEX
ちなみに、 SQL Server固有のもののように見え、データベース間で移植できないため、使用したくありません。