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();