2

私のコード:

public string LocName(string locID)
    {
        var name = (from a in idc.Locations
                    where a.ID.ToString() == locID
                    select a.Name).Single();
        return name;   
    }

ID に一致する Location の名前を TextBlock の文字列として返すために必要です。代わりに、要素は返されません。ID が正しいことを確認したので、少なくとも 1 つの要素を返す必要があります。

私も試しました:

where a.ID == new Guid(locID)

としても

.First()
.FirstOrDefault()

結果を要素として返し、それにデータバインドしようとしましたが、それでも要素はありません。

エラーは何ですか?

4

2 に答える 2

2

データが存在する場合は大文字と小文字の問題である必要がありToUpper()ます。文字列の等価性チェックに最適化されているため、常に使用する必要があります。

また、常にFirstOrDefaultasを使用する必要があります。Single一致が複数ある場合はFirst例外をスローし、一致がない場合は例外をスローします。試す:

編集Trim:スペースをサニタイズするために、入力された値も追加しました。locIDパラメータがnullとして渡された場合に爆発するため、パラメータにnullチェックも追加しました。最後に、例外が発生するため、ステートメントが null を返し、その文字列に対して他の処理 (または など) を実行している場合に備え??て、ステートメントに (合体)を追加しました。returnTrimToLowerCase

public string LocName(string locID)
{
    if (locID == null) return string.Empty;

    var name = (from a in idc.Locations
                where a.ID.ToString().Trim().ToUpper() == locID.Trim().ToUpper()
                select a.Name).FirstOrDefault();

    return name ?? string.Empty;   
}
于 2012-05-22T08:50:46.583 に答える
1

まずSingle()、クエリに複数の一致がある場合、例外がスローされます。FirstOrDefault()複数の回答が返されることを期待している場合は、使用することをお勧めします。

また、文字列の一致を妨げている可能性のある空白/大文字と小文字の問題を取り除こうTrim()とします。ToUpper()

于 2012-05-22T08:50:40.797 に答える