我真的被这个难倒了。我正在学习LINQ并使用Microsoft Visual C#Express Edition连接到包含有关我的书籍信息的SQL Server数据库。我根据需要创建了LINQ to SQL类。那东西显然有效。这一切都有效,除了我无法弄清楚为什么,如果我搜索“SR”(大写),它会找到两个记录,“SR-71 Revealed,The Inside Story”,如预期的那样,但它也发现“褪色太阳:Kesrith“其中”sr“是小写的。我正在使用字符串类的IndexOf()方法,它应该执行case-SENSITIVE比较,对吧?输出显示第二个书名,如上所示,“sr”为小写。这是代码的相关部分:
// 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);
}
}
}
}
答案 0 :(得分:10)
在最后一步,您的查询将转换为sql。在SQL服务器字符串中,字段(varchar,nvarchar)是case insensetive。所以
如果值为select * from tbl where col like '%foo%'
或Foo
FOo
将检索
答案 1 :(得分:2)
我认为默认情况下它区分大小写,但您始终可以使用StringComparison
重载来指定区分大小写:
test.IndexOf("foo", StringComparison.Ordinal);
StringComparison
枚举: