在 DataTable 列 returns 中搜索一个值,当该值存在时为空
Searching for a value in a DataTable column returns empty when the value exists
我的 DataTable
目前看起来像这样(名称 = dtRecipient
):
使用以下 LINQ 语句,我试图找到 RecipientId 值等于例如"marcus":
var found = dtRecipients.AsEnumerable().Where(row => String.Equals(row.Field<string>("RecipientId"), "marcus"));
但是没有返回任何结果,而正如您在图片中看到的,有 "marcus" 的记录。给出了什么?
没有空格或其他不可见字符?
您可以使用 Trim
:
删除前导和尾随空格(或 new-line/tab-characters)
var found = dtRecipients.AsEnumerable()
.Where(row => String.Equals((row.Field<string>("RecipientId") ?? "").Trim(), "marcus"));
如果您想删除所有不可打印的字符,您可以使用 Char.IsControl
来检测它们:
var found = dtRecipients.AsEnumerable()
.Where(row => String.Equals(
new String(
(row.Field<string>("RecipientId") ?? "").Trim()
.Where(c => !char.IsControl(c))
.ToArray()),
"marcus", StringComparison.OrdinalIgnoreCase));
我还使用 StringComparison.OrdinalIgnoreCase
来展示如何忽略大小写。
我的 DataTable
目前看起来像这样(名称 = dtRecipient
):
使用以下 LINQ 语句,我试图找到 RecipientId 值等于例如"marcus":
var found = dtRecipients.AsEnumerable().Where(row => String.Equals(row.Field<string>("RecipientId"), "marcus"));
但是没有返回任何结果,而正如您在图片中看到的,有 "marcus" 的记录。给出了什么?
没有空格或其他不可见字符?
您可以使用 Trim
:
var found = dtRecipients.AsEnumerable()
.Where(row => String.Equals((row.Field<string>("RecipientId") ?? "").Trim(), "marcus"));
如果您想删除所有不可打印的字符,您可以使用 Char.IsControl
来检测它们:
var found = dtRecipients.AsEnumerable()
.Where(row => String.Equals(
new String(
(row.Field<string>("RecipientId") ?? "").Trim()
.Where(c => !char.IsControl(c))
.ToArray()),
"marcus", StringComparison.OrdinalIgnoreCase));
我还使用 StringComparison.OrdinalIgnoreCase
来展示如何忽略大小写。