使用where子句为数据表选择不同的值



我有一个数据表。我从下面的代码中得到了列的不同值。

AllFields是我的数据表。

var distinctIds = AllFields.AsEnumerable()
.Select(s => new
{
id = s.Field<string>(ColumnName),
})
.Distinct()
.ToList();

然而,我想得到一个列的不同值,在同一列上有where条件。我试过下面的东西。

var distinctIds = AllFields.AsEnumerable()
.Select(s => new
{
id = s.Field<string>(ColumnName),
})
.Distinct()
.Where(f => f.id.Contains(TxtStringSearchInput.Text))
.ToList();

它在运行时向我显示以下错误。

nullreferenceexception错误。{"对象引用未设置为对象的实例。"}

因为您正在获得NRE。看起来其中一个值来自null,所以您应该在Where():中检查null

var distinctIds = AllFields.AsEnumerable()
.Select(s => new
{
id = s.Field<string>(ColumnName),
})
.Distinct()
.Where(f => f.id !=null && f.id.Contains(TxtStringSearchInput.Text))
.ToList();

由于您在第二次调用中得到了一个null引用异常,唯一的区别是您在id字段上调用Contains,因此很可能id字段在其中一次比较中为null。

尝试在调用Contains之前检查null,例如:

var distinctIds = AllFields
.AsEnumerable()
.Select(s => new {id = s.Field<string>(ColumnName),})
.Distinct()
.Where(f =>
f.id != null &&
f.id.Contains(TxtStringSearchInput.Text))
.ToList();

最新更新