Я пишу функцию, в которой пользователь может ввести несколько слов для поиска по базе данных. Когда я переместил это на систесть, код перестает работать правильно.Entity Framework с несколькими предложениями Where where неверные результаты
В systest в запросе используется только последнее слово поисковых запросов.
Я привел соответствующий код в LinqPad, чтобы узнать, могу ли я реплицировать проблему. Он корректно работает с базой данных DEV и продолжает сбой в базе данных systest
var cleanTextParts = Regex.Replace("foot pain", @"[^\w]", " ", RegexOptions.None)
.ToLower()
.Split(' ')
.Where(s => !string.IsNullOrEmpty(s));
cleanTextParts.Dump();
var query = ClinicalFindings.AsQueryable();
foreach (var s in cleanTextParts)
{
query = query.Where(code => code.Description.ToLower().Contains(s));
}
var results = query.ToList();
results.Dump();
Когда я запускаю его против Дев, это SQL, который генерируется и побежал:
exec sp_executesql N'SELECT [t0].[ClinicalFindingsID], [t0].[ID], [t0].[Description], [t0.[Preferred]
FROM [ClinicalFindings] AS [t0]
WHERE (LOWER([t0].[Description]) LIKE @p0) AND (LOWER([t0].[Description]) LIKE @p1)',N'@p0 varchar(8000),@p1 varchar(8000)',@p0='%pain%',@p1='%foot%'
И вот это против Systest:
exec sp_executesql N'SELECT [t0].[ClinicalFindingsID], [t0].[ID], [t0].[Description], [t0.[Preferred]
FROM [ClinicalFindings] AS [t0]
WHERE (LOWER([t0].[Description]) LIKE @p0) AND (LOWER([t0].[Description]) LIKE @p1)',N'@p0 varchar(8000),@p1 varchar(8000)',@p0='%pain%',@p1='%pain%'
Обратите внимание на разницу в параметрах, используемых для ИНЕКЕ: @ p0 = '% боль%', @ p1 = '% боль%' против @ P0 = '% лапка%', @ p1 = '% боль%'
Дев является SQL 2008 R2 Systest является SQL 2005
Я планирую переместить базу данных в экземпляр 2008 R2 в Попробуйте проверить, действительно ли проблема вызвана версиями базы данных.
Как исправить это, не перейдя на другой сервер?
@ KeithSirmons - Я правильно понял LinqPad? – Matthew
Нет. Думаю, вы неправильно поняли мое заявление о LinqPad. Он продолжал терпеть неудачу с LinqPad в systest. Это не удалось в версиях .NET 3.5 и 4.0 для LinqPad. Я до сих пор не знаю, какая разница между моей рабочей станцией Dev и Systest, что касается .NET. Они имеют одинаковые пакеты обновлений и версии. Спасибо за вашу помощь. –