I'm really stumped by this one. I'm learning LINQ and used Microsoft Visual C# Express Edition to connect to a SQL Server database containing information about my books. I created the LINQ to SQL classes as needed. That stuff obviously works. It all works except I cannot figure out for the life of me why, if I search for "SR" (uppercase), it finds two records, "SR-71 Revealed, The Inside Story", as expected, but it also finds "Faded Sun: Kesrith" where the "sr" is lowercase. I'm using the IndexOf() method of the string class, which is supposed to perform a case-SENSITIVE comparison, right? The output displays the second book title as shown above, with the "sr" in lowercase. Here's the pertinent part of the code:
// normal using directives here
namespace QueryBooksDB {
class Program {
static void Main() {
var urgh = new BooksDataContext();
Console.WriteLine("Enter a string to search for:");
string str = Console.ReadLine();
var list = from book in urgh.Books
where book.Title.IndexOf(str) > -1
orderby book.Title
select new { ID = book.BookId, book.Title, book.Location };
foreach ( var b in list ) {
Console.WriteLine(b.Title);
}
}
}
}
The indexOf() method returns the index number where the target string is first found or -1 if the target is not found. Like equals(), the indexOf() method is case-sensitive, so uppercase and lowercase chars are considered to be different.
The indexOf() method returns -1 if the value is not found. The indexOf() method is case sensitive.
CONTAINSSTRING is not case-sensitive, but it is accent-sensitive. CONTAINSSTRINGEXACT: Returns TRUE if one text string contains another text string.
IndexOf Method is by default case sensitive. But we can make it case insensitive if we use one of the overloads: IndexOf(String, StringComparison).
At the final step your query is translated into sql. In SQL server string alike fields (varchar, nvarchar) are case insensetive. So
select * from tbl where col like '%foo%'
will retrieve if the value is Foo
or FOo
I thought it was case-sensitive by default, but you can always use the StringComparison
overload to specify case sensitivity:
test.IndexOf("foo", StringComparison.Ordinal);
StringComparison
enumeration:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With