c# - 使用 Linq to dataset 搜索数据表

标签 c# asp.net linq datatable

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

最佳答案

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

关于c# - 使用 Linq to dataset 搜索数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27531022/

相关文章:

c# - 固定在 map 上(如 UI)

c# - Linq 表达式抛出 ArgumentNullException

c# - 为什么 LET 语句的顺序在此 Entity Framework 查询中很重要?

c# - 从服务器端调用 asmx

javascript - JQuery 验证不适用于 ajax post

c# - 需要帮助来决定什么是跟踪系统 (.NET) 的最佳解决方案

c# - Linq 选择 IList

c# - WCF 应用端点

C# 针对 ARM : How to deserialize JSON?

c# - Resharper 代码完成工具提示未显示