Текстовый поиск Linq-To-SQL с помощью метода .Contains - PullRequest
1 голос
/ 16 апреля 2010

У меня есть таблица, в которой мне нужно выполнить поиск по тексту в поле без учета регистра.

Если я запускаю этот запрос в LinqPad непосредственно в моей базе данных, он работает как положено

Table.Where(tbl => tbl.Title.Contains("StringWithAnyCase"))
// also, adding in the same constraints I'm using in my repository works in LinqPad
// Table.Where(tbl => tbl.Title.Contains("StringWithAnyCase") && tbl.IsActive == true)

В моем приложении у меня есть хранилище, которое предоставляет объекты IQueryable, которые выполняют некоторую начальную фильтрацию, и это выглядит так

* +1007 *

В контроллере (это приложение MVC) я использую подобный код, пытаясь имитировать запрос LinqPad:

var rpo = new RepositoryOfTable();
var tables = rpo.GetAllTables();
// for some reason, this does a CASE SENSITIVE search which is NOT what I want.
tables = tables.Where(tbl => tbl.Title.Contains("StringWithAnyCase");
return View(tables); 

Столбец определен как nvarchar(50) в SQL Server 2008.

** Обновление **

У меня был частичный класс (для одной из моих сущностей из Linq-To-SQL) со свойством IQueryable, но каким-то образом возвращение IQueryable из EntitySet заставило мои последующие запросы работать в IEnumerable (читай Linq-To-Objects ) путь, даже если они действовали на IQueryable типах.

...