使用 Linq 搜索数据表到数据集

本文关键字:数据集 数据表 搜索 Linq 使用 | 更新日期: 2023-09-27 18:34:34

我有一个用户信息的数据表。我正在尝试执行可以使用姓氏、用户 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进行部分搜索。

使用 Linq 搜索数据表到数据集

修改条件以首先检查空字符串(使用 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)