【问题标题】:How to filter datatable based on condition and ignoring case?如何根据条件过滤数据表并忽略大小写?
【发布时间】:2020-11-25 21:10:18
【问题描述】:

伙计们,我正在尝试从数据表中获取记录,同时它正在检查大小写 ABC 和 abc 是两个不同的,我使用了 StringComparer.OrdinalIgnorecase 但它不起作用。我该如何解决这个问题?

from tblproj in dt.AsEnumerable() 
where tblproj.Field<string>("ProjectStatus") == "Active" && 
      ( string.Equals(tblproj.Field<string>("ColumnName").StartsWith(searchText),StringComparer.OrdinalIgnoreCase) || string.Equals(tblproj.Field<string>("ColumnName").Contains(searchText), StringComparer.OrdinalIgnoreCase))
      || string.Equals(tblproj.Field<long>("ColumnName").ToString().Contains(searchText), StringComparer.OrdinalIgnoreCase)

【问题讨论】:

  • String.StartsWithString.Contains的结果是什么类型? String.Equals 取什么参数?
  • 它将字符串作为参数
  • 并且StringComparer.OrdinalIgnoreCase的返回类型和类型不是strings。使用带有StringComparison 参数的StartsWithContains 的正确版本。
  • 我该如何处理?

标签: c# asp.net linq asp.net-core datatables


【解决方案1】:

它在什么情况下重要吗?如果不是,那么只需对值执行 .ToUpper() 或 .ToLower() ,然后在两者之间进行比较。

【讨论】:

    【解决方案2】:

    使用正确版本的String.ContainsString.StartsWith 在测试中忽略大小写:

    var ans = from tblproj in dt.AsEnumerable()
              where tblproj.Field<string>("ProjectStatus") == "Active" &&
                    tblproj.Field<string>("ColumnName").StartsWith(searchText, StringComparison.OrdinalIgnoreCase) ||
                    tblproj.Field<string>("ColumnName").Contains(searchText, StringComparison.OrdinalIgnoreCase) ||
                    tblproj.Field<long>("ColumnName").ToString().Contains(searchText, StringComparison.OrdinalIgnoreCase)
              select tblproj;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      相关资源
      最近更新 更多