我有一个用户信息的数据表。我正在尝试执行可以使用姓氏,用户ID或用户角色的搜索。我有一个名称和ID的搜索文本框以及用户角色的搜索下拉列表。并非所有都可以是空白的,但可以使用任何组合。我正在使用以下但不要认为它是正确的,因为它总是返回整个数据表:
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();
我做错了什么? 我还需要能够对名称和ID进行部分搜索。
答案 0 :(得分:3)
修改条件以首先检查空字符串(使用String.IsNullOrWhiteSpace
)
然后应用您的过滤器,如:
var results = dtUsers.AsEnumerable()
.Where(r =>(!String.IsNullOrWhiteSpace(tbName.Text) && r.Field<String>("LASTNAME").Contains(tbName.Text.Trim())
|| (!String.IsNullOrWhiteSpace(tbUserID.Text) &&r.Field<String>("USERID").Contains(tbUserID.Text.Trim())
|| r.Field<String>("USERROLELIST").Contains(ddlRoles.SelectedItem.Text));
同样地,您可以使用最后一个条件来执行此操作,例如:
(ddlRoles.SelectedItem != null &&
!String.IsNullOrWhiteSpace(ddlRoles.SelectedItem.Text) &&
r.Field<String>("USERROLELIST").Contains(ddlRoles.SelectedItem.Text)