我有一个数据表。我从下面的代码中得到了列的不同值。
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();