chowdary2005 Ответов: 1

Несколько подобных условий для одного столбца в datatable.выбирать


Привет,

Мне нужно получить результаты из таблицы данных.Выберите, где этот столбец содержит длинную строку.
Пользователь выполняет поиск по нескольким терминам одновременно.

например

Если пользователь ищет как инъекционный позвоночник ::

У меня есть 10 000 строк в столбце.

Теперь мне нужно показать строки, где он соответствует как инъекции, так и позвоночнику. Я не знаю, где эти 2 термина будут находиться в этой строке.

Итак, мне нужно использовать подобное условие. Я не уверен, как я могу использовать его. Ниже приведены восемь выборочных строк данных, из которых пользователь должен получить только первую строку и только вторую строку, в то время как другие все строки содержат инъекцию строки, но не позвоночник.

Injection/Aspiration of Spine, Diagnostic/Therapeutic 
Injection procedure, arterial, for occlusion of arteriovenous malformation, spine
Injection, intralesional; up to and including 7 lesions
Injection, intralesional; more than 7 lesions
Subcutaneous injection of filling material (eg, collagen); 1 cc or less
Subcutaneous injection of filling material (eg, collagen); 1.1 to 5.0 cc
Subcutaneous injection of filling material (eg, collagen); 5.1 to 10.0 cc
Subcutaneous injection of filling material (eg, collagen); over 10.0 cc
Injection(s); single tendon origin/insertion


заранее спасибо.

Что я уже пробовал:

DataRow[] ProRow = MainDS.Tables["Table1"].Select("LDesc Like '%" + SearchTerm + "%' And Active = 1 and Type in('CPT')");

[no name]

Как вы определили, что позвоночник - это то же самое, что и позвоночник? Вам нужно определить свои бизнес-правила.

chowdary2005

Это опечатка. Это не проблема с бизнес-правилами. Поправил вопрос.

Sinisa Hajnal

вставьте % между любыми двумя словами в searchterm, которые не заключены в кавычки. Таким образом, для инъекции позвоночника вы получите %spine%injection%, и вам тоже нужно обратное
% инъекция%позвоночник%

Если они сгруппированы вместе цитатами "инъекция позвоночника", то вы ищете весь этот термин.

Вы также можете посмотреть на предложение NEAR в SQL server https://msdn.microsoft.com/en-us/library/ms142568.aspx и посмотрим, поможет ли это

chowdary2005

Спасибо брату за быстрый ответ. Но мне это нужно в DataTable.Выберите в C#, а не в SQL Server. Как бы то ни было, я попробовал следующий код на c#. но получаю ошибку, предусматривающую ваш отзыв.

строка фильтра = строка.Пустой;
for (int i = 0; i & lt; temp.Длина; i++)
{
filter = Фильтр + " % " + temp[i].ToString (). Trim();
}
фильтр = фильтр + "%";
Объекта datarow[] строку = MainDS.Столы["Таблица1"].Выберите ("LDesc like" + filter + " And Active = 1 и введите ('CPT')");

заранее спасибо.

1 Ответов

Рейтинг:
2

Maciej Los

Вы можете использовать Linq To DataSet[^]:

DataTable dt = MainDS.Tables["Table1"]
var result = dt.AsEnumerable()
    .Where(x=>x.Field<string>("FieldName").Contains("Injection") && 
              !x.Field<string>("FieldName").Contains("Spire"))
    .ToList();


Приведенный выше запрос должен возвращать список потоков данных, удовлетворяющих критериям.

Для получения более подробной информации, пожалуйста, смотрите:
Примеры LINQ to DataSet[^]
Запросы в LINQ to DataSet[^]
Запрос наборов данных (LINQ to DataSet)[^]

[РЕДАКТИРОВАТЬ]
Если вы не можете использовать Linq, вы можете фильтровать данные на уровне базы данных. Чтобы иметь возможность сделать это, вы должны использовать SqlCeCommand[^] вместе с параметры[^]. Чтобы получить результаты, используйте Метода executereader()[^] и считывать данные в SqlCeDataReader[^]. Наконец, используйте объект DataTable.Загрузка()[^] метод получения данных из SqlCeDataReader.

Попробуй!
Удачи!


chowdary2005

Спасибо за ответ Мацей Лос. Но проект находится на .net 2.0, так что я не могу использовать LINQ для этого. Поэтому я борюсь.

Maciej Los

Другой способ добиться этого - запросить вашу базу данных, а затем перезагрузить datatable. Какую базу данных вы используете?

chowdary2005

Я использую SQL CE 4.0

Maciej Los

См. обновленный ответ.

chowdary2005

Спасибо за ответ. Постараюсь вернуться с результатами.

Maciej Los

ОК.
Проверить это LINQBridge 1.3.0[^], чтобы включить решения Linq в ваш проект ;)
Удачи!
Овации
Мацей