2016-09-08 2 views
0

Это прекрасно работает, когда вход является одной строкойПоиск по несколько строк с использованием SQLFunction.Difference с EF

В этом примере «Lorem Ipsum»

dbContext.NewsArticles.Where(article => SQLFunction.Difference(article.Text, "Lorem ipsum") == 3).ToArray() 

Как я могу искать по несколько строк? Другими словами, ввод представляет собой строку [] или Список

var input = new List<string>{ 
"Lorem ipsum dolor", 
"elementum lacinia", 
"cursus nulla molestie", 
} 

Возможно ли это?

+0

Двумя способами, с помощью которых я могу справиться с этим в SQL, является пользовательский тип таблицы на SQL-сервере, который позволит вам передать таблицу в запрос или разделив запятую строку, которая будет разделена через пользовательскую SQL-функцию, чтобы вернуть переменную таблицы. Я не думаю, что EF прекрасно играет с UDTT, поэтому функция может быть лучшим выбором. – Max

+2

Вы пробовали '.Where (article => input.Any (x => SQLFunction.Difference (article.Text, x) == 3))'? – juharr

+0

@juharr это работает. добавьте его в качестве ответа и выберите его. thx – Jasmine

ответ

1

Вы должны иметь возможность использовать этот список только с Any.

dbContext.NewsArticles 
    .Where(article => input.Any(x => SQLFunction.Difference(article.Text, x) == 3)) 
    .ToArray(); 
+0

добавит индекс в столбец NewsArticles.Text в SQL Server, чтобы повысить производительность? – Jasmine

+0

* SQL Server soundex/разница производительности – Jasmine

+0

@ Jasmine Я сомневаюсь, так как это не точное сравнение совпадений. – juharr

0

В зависимости от размера таблицы и типа данных/размера текстового столбца. Разделение таблицы на дату (если это опция и в зависимости от распределения данных) может обеспечить положительные результаты, когда в плане запроса возникает параллельный запрос.

+0

Это nvarchar (max), я хотел бы знать, будет ли добавление индекса улучшат производительность soundex/difference – Jasmine

+0

Я не верю, что добавление индекса в этом сценарии, где вы * только * фильтруете текстовый столбец, используя Difference, поможет в любом осмысленно. Если кто-то еще не предлагает лучшее решение для этого единственного запроса фильтра, возможно, стоит рассмотреть возможность расширения критериев фильтра для повышения производительности или, возможно, захвата и индексацию отдельной таблицы с общими орфографическими ошибками. Я полагаю, это зависит от того, что приемлемо в вашем конкретном сценарии. – SyntaxCommander

Смежные вопросы