2

これを行うためにさまざまな方法を試しましたが、これを試すたびに null 参照例外がスローされます。

フィールド内の値をフィルタリングして、そのフィールド内の一意の値のリストを取得しようとしています。欠損値のないフィールドで機能しますが、null 値があることがわかっているフィールドで使用すると例外がスローされるため、それをフィルタリングする必要があると想定しています。

私がこれを行っていた元の方法は、値をループして、一意の値のリストにまだ値が含まれているかどうかを確認することでしたが、これには長い時間がかかり、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 個の値が入っているためであることも付け加えておく必要がありますが、これは機能し、私がしようとしていることに影響を与えるべきではありませんここで行う。

4

2 に答える 2

3

.ToString()値を nullにすることはできません。しようとしているようです。null の候補にはlstbxFields.SelectedValueg.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));
于 2012-08-08T22:45:28.977 に答える
-1

データモデルは、エラーが発生しやすく、操作が難しいという意味で、ほぼ確実に「間違っています」。すべてをに変換するのではなくstring、強く型付けされたオブジェクトを直接操作する必要があります。これを行うと、このバグが自動的に修正される可能性があります。これは、ToStringをnull値にしようとしたときにNullReferenceExceptionがスローされる可能性が非常に高いためです。

型指定されたオブジェクトでの作業がはるかに安全であるだけでなく、はるかに高速で、コードが短くなります。

于 2012-08-08T22:57:37.140 に答える