我尝试了很多不同的方法来执行此操作,但每次尝试此操作时都会引发空引用异常。
我正在尝试过滤字段中的值以获得该字段内唯一值的列表。它适用于没有缺失值的字段,但是当我在我知道有空值的字段上使用它时,它会抛出异常,所以我假设这就是我应该过滤的内容。
我最初的做法是循环遍历这些值并检查唯一值列表是否包含该值,但这需要很长时间,我想利用 Linq 的强大功能
List<Graphic> ReturnedGraphics = e.FeatureSet.Features as List<Graphic>;
IEnumerable<string> ValueSet = (
from g in e.FeatureSet.Features
where !uniquevalues.Contains((g.Attributes[_selectedField] == null ? "blank" : g.Attributes[_selectedField].ToString()))
select g.Attributes[_selectedField] == null ? "blank" : g.Attributes[_selectedField].ToString()
) as IEnumerable<string>;
if (ValueSet.Any())
{
uniquevalues.AddRange(ValueSet);
}
我还应该补充一点,我向列表添加范围的原因是因为有 5000 个值从服务器传入,该服务器对要返回的值有限制,但是它适用于此,并且不应该对我想在这里做什么。
最佳答案
您不能.ToString()
null 值。看起来你可能正在尝试这样做。 null 的候选者包括 lstbxFields.SelectedValue
、g.Attributes[someVal]
如何合理化您的代码,以便更容易捕获错误,并且您不会到处重复自己?
var selVal = lstbxFields.SelectedValue;
if(selVal == null)
{
//act on this
return; //or throw
}
var selectedValue = selVal.ToString();
var query=
e.FeatureSet.Features
.Select(feature => feature.Attributes[selectedValue])
.Select(attr => attr == null
? "blank"
: attr.ToString())
.Where(attrVal => !uniquevalues.Contains(attrVal));
关于c# - 检查不同的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11874282/