1

私はすでにlinqを使用していますが、検索IDのみで、完全に機能しました

var obj = (from VAR in db.infos
           where VAR.id == 22                                                                                
           select new
           {
               title = VAR.title,
           }).SingleOrDefault();
Label2.Text = obj.title.Trim();

場所で検索しようとするとエラーが発生します

var obj = (from VAR in db.infos
           where VAR.location.Trim() == "Lim"
           select new
           {
               title = VAR.title.Trim(),
           }).SingleOrDefault();

        SearchJob.Items.Add(obj.title.Trim());
        Label2.Text = obj.title;

label2行にエラーがあります

オブジェクト参照がオブジェクト インスタンスに設定されていません。

どうすれば修正できますか?

if (obj.title != null)
{
    SearchJob.Items.Add(obj.title.Trim());
    Label2.Text = obj.title;
}

オブジェクト参照がオブジェクト インスタンスに設定されていません。

解決

SingleOrDefault()に変更FirstOrDefault()

4

3 に答える 3

1

クエリでエラーが発生したと思います

最初のクエリにはソースがあります db.infos

第二にあなたはソースを持っていますdb.jobinfos

ソースが変更されます

ラベルに空のテキストを割り当てると、次のようにobj.title表示されます。存在しないか、ソースが間違っているためにクエリでエラーが発生しているようです。

objはタイトルフィールドを返していません。デバッグしてobjを確認します。

于 2012-08-25T07:58:49.353 に答える
1

あなたはそこでいくつかの厄介なことをしています、非常に悪い習慣です。たとえば、これ:

var obj = (from VAR in db.infos
           where VAR.location.Trim() == "Lim"
           select new
           {
                title = VAR.title.Trim(),

           }).SingleOrDefault();

SearchJob.Items.Add(obj.title.Trim());
Label2.Text = obj.title;

ナンセンスです!理由をお話ししましょう。

データをデータベースに挿入する前ではなく、データベースに挿入する前に必ずデータを確認してください。この方法では、多くの不要なオーバーヘッドが発生しますが、これは完全に回避できます。後ではなく、前にデータをトリミングします。

次に、必要な文字列値は1つだけですが、匿名オブジェクトを作成します。なぜ?代わりにこれを行ってください:

string title = (from o in db.infos
                where o.location == "Lim"
                select o.title).SingleOrDefault(); 

SingleOrDefault結果が1つだけであるか、まったくない場合に使用します。ただし、複数の結果が予想され、最初の結果のみが必要な場合は、を使用してFirstOrDefaultください。

ご覧のとおり、oの代わりにを使用していVARます。確かにそれほど重要ではありませんが、予約語の1つに非常によく似た単語を使用することは決して良い考えではありません(var)。

例外が発生した場合Object reference not set to an instance of an object.は、クエリがnullを返し、存在しないオブジェクトにアクセスしようとしていることを意味します。クエリがある時点でnullを返す可能性がある場合は、メンバーにアクセスするときに常にnullを確認してください。

編集

if ( obj.title != null )

オブジェクト自体がnullかどうかをチェックする必要があるため、これも悪いことです。

if (obj != null)

あなたが本当にあなたの悪いアプローチを使いたいのなら。

于 2012-08-25T08:23:08.170 に答える
0

例外をスキップしてみてください:)

     public static class LINQException {

    public static void TryExample() {
        var LsWithEx = from p in Enumerable.Range(0, 10) select int.Parse("dsfksdj");
        var LsSkipEx = (from p in Enumerable.Range(0, 10) select int.Parse("dsfksdj")).SkipExceptions();
    }

    public static IEnumerable<T> SkipExceptions<T>(this IEnumerable<T> values)
    {
        using (var enumerator = values.GetEnumerator())
        {
            bool next = true;
            while (next)
            {
                try
                { next = enumerator.MoveNext();}
                catch
                { continue;}
                if (next) yield return enumerator.Current;
            }
        }
    }
}
    var obj = (from VAR in db.infos
               where VAR.location.Trim() == "Lim"
               select new
               {
                   title = VAR.title.Trim(),

               }).SkipExce.SingleOrDefault();
于 2012-08-25T08:59:53.063 に答える