У меня есть информация о пользователе. Я пытаюсь выполнить поиск, который может использовать фамилию, идентификатор пользователя или роль пользователя. У меня есть текстовое поле поиска для имени и идентификатора и раскрывающегося списка поиска для роли пользователя. Не все могут быть пустыми, но любое сочетание может использоваться. Я использую следующие, но дон; т думаю, что это правильно, так как она всегда возвращает весь DataTable:Поиск datatable с использованием Linq to dataset
dtUsers.CaseSensitive = false;
var results = dtUsers.AsEnumerable()
.Where(r => r.Field<String>("LASTNAME").Contains(tbName.Text.Trim())
|| r.Field<String>("USERID").Contains(tbUserID.Text.Trim())
|| r.Field<String>("USERROLELIST").Contains(ddlRoles.SelectedItem.Text));
dtUsers = results.CopyToDataTable();
Что я делаю неправильно? Мне также нужно сделать частичный поиск по имени и идентификатору.
Спасибо, Хабиб, работает. Он ожидал полного совпадения, поэтому я изменил. Содержит (...) в .IndexOf (...), и я могу искать частичное имя или идентификатор. Однако, несмотря на то, что я отключил dtUser.CaseSensitive = false, он ожидает точного совпадения. Если я наберу «smi», он не вернет пользователя «Смит», но «Сми» будет. – NoBullMan
Для нечувствительного к регистру содержимого используйте 'IndexOf (tbName.Text, StringComparison.InvariantCultureIgnoreCast)> -1)' Смотрите: http://stackoverflow.com/questions/444798/case-insensitive-containsstring – Habib
@NoBullMan, до ' Свойство CaseSenstive' связано с тем, что оно будет использоваться, когда вы DataTable.Select' (свойство CaseSensitive влияет на сравнение строк при сортировке, поиске и фильтрации) ', это не повлияет на какой-либо запрос на основе LINQ – Habib