C# 为datatable选择具有where子句的不同值

C# 为datatable选择具有where子句的不同值,c#,linq-to-objects,C#,Linq To Objects,我有一个数据表。我从下面的代码中得到列的不同值 AllFields是我的数据表 var distinctIds = AllFields.AsEnumerable() .Select(s => new { id = s.Field<string>(ColumnName), }) .Distinct() .ToList(); var differentids=AllFields.AsEnumerable() 。选择(s=>n

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

AllFields
是我的数据表

var distinctIds = AllFields.AsEnumerable()
    .Select(s => new
    {
        id = s.Field<string>(ColumnName),
    })
    .Distinct()
    .ToList();
var differentids=AllFields.AsEnumerable()
。选择(s=>new
{
id=s.字段(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();
var differentids=AllFields.AsEnumerable()
。选择(s=>new
{
id=s.字段(ColumnName),
})
.Distinct()
.Where(f=>f.id.Contains(TxtStringSearchInput.Text))
.ToList();
它在运行时向我显示以下错误

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


当你得到NRE的时候。看起来其中一个值出现了
null
,因此您应该在
Where()
中检查null

var differentids=AllFields.AsEnumerable()
。选择(s=>new
{
id=s.字段(ColumnName),
})
.Distinct()
.Where(f=>f.id!=null&&f.id.Contains(TxtStringSearchInput.Text))
.ToList();

由于您在第二次调用时收到一个空引用异常,唯一的区别是您在
id
字段上调用
Contains
,因此对于您的一个比较,
id
字段很可能为空

在调用
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();
var-differentids=AllFields
.可计算的()
.Select(s=>new{id=s.Field(ColumnName),})
.Distinct()
.其中(f=>
f、 id!=null&&
f、 id.Contains(TxtStringSearchInput.Text))
.ToList();

心理调试表示您的一行中有一个
null
,并且包含失败。然而,如果没有实际的错误信息,我的心理技能已经被认为是缺乏的。@SteveMitcham可能是正确的-查看链接问题,了解关于这个错误的大量信息以及如何追踪它的位置。
var distinctIds = AllFields
    .AsEnumerable()
    .Select(s => new {id = s.Field<string>(ColumnName),})
    .Distinct()
    .Where(f =>
        f.id != null &&
        f.id.Contains(TxtStringSearchInput.Text))
    .ToList();