2016-11-21 2 views
0

にとNullReferenceExceptionをチェックするために、私は私のDALにEFで正常に動作LINQクエリを持っている:どのようにLINQの結果

 using (var mLEntities = new myLab02Entities1()) 
     { 
      var test = from c in mLEntities.Chemicals 
         from u in c.Usages 
         select new 
         { 
          cChemID = c.Chem_ID, 
          c.Name, 
          c.Supplier, 
          c.Grade, 
          c.OrderNo, 
          c.BatchNo, 
          c.EntryDate, 
          c.CreatedBy, 
          cUser = u.Person.PersName, 
          uChemID = u.Chem_ID, 
          u.Study_ID, 
          u.UsedBy, 
          uUser = u.Person.PersName, 
          u.UseDate, 
          u.Project.StudyNo, 
          u.Project.ProjectName, 
         }; 

用途は、化学物質のナビゲーションプロパティ(1 CHEM:N USA)で、そして人とプロジェクトは、用途のナビゲーションプロパティ(両方とも1:1)です。 は、その後、私は私のビジネスロジックでこのクエリを置きたいのだと書きました:

ある
 IList<ChemicalBDO> chemicalListBDO = chemListDAO.GetChemicalsListFromDB(); 

     var test = from c in chemicalListBDO 
        from u in c.Usages 
        select new 
        { 
         cChemID = c.Chem_ID, 
         c.Name, 
         c.Supplier, 
         c.Grade, 
         c.OrderNo, 
         c.BatchNo, 
         c.EntryDate, 
         c.CreatedBy, 
         cUser = u.Person.PersName, 
         uChemID = u.Chem_ID, 
         u.Study_ID, 
         u.UsedBy, 
         uUser = u.Person.PersName, 
         u.UseDate, 
         u.Project.StudyNo, 
         u.Project.ProjectName 
        }; 

、私が最初に私のEF DBcontextを照会し、私の化学エンティティを取得し、私はこの化学エンティティに対してクエリを書くよりも。 私にとって奇妙なことは、u.Personとu.ProjectがNULLになる可能性があるため、最後のコードがSystem.NullReferenceExeptionをスローすることです。しかし、最初のクエリは例外をスローしませんが、その理由は何ですか? selectクエリでNULL参照を処理するにはどうしたらいいですか? "if"、 "?"または "??" ?

Btw:DALで複雑なクエリを実行するのは良いプログラミング方法ではないと思っていましたが、それは本当ですか? 何か助けていただければ幸いです。

+0

あなたはこの記事を見たことがありますか? http://stackoverflow.com/a/14260113/821681 –

+0

ジョニー:私は前にその投稿を見ていなかったし、それを見て、ありがとう。 Hucky – Hucky

+0

いつでも。私はそれがあなたの問題を完全に解決するかどうかはわかりませんが、潜在的な可能性があるように見えましたので、私はそれを共有することに決めました。がんばろう! –

答えて

0

これは、この問題を修正する必要があります。

IList<ChemicalBDO> chemicalListBDO = chemListDAO.GetChemicalsListFromDB(); 

    var test = from c in chemicalListBDO 
       from u in c.Usages 
       select new 
       { 
        cChemID = c.Chem_ID, 
        c.Name, 
        c.Supplier, 
        c.Grade, 
        c.OrderNo, 
        c.BatchNo, 
        c.EntryDate, 
        c.CreatedBy, 
        cUser = u.Person != null ? u.Person.PersName : string.Empty, 
        uChemID = u.Chem_ID, 
        u.Study_ID, 
        u.UsedBy, 
        uUser = u.Person != null ? u.Person.PersName : string.Empty, 
        u.UseDate, 
        u.Project != null ? u.Project.StudyNo : -1, 
        u.Project != null ? u.Project.ProjectName : string.Empty 
       }; 
+0

こんにちはbrugi82:私はあなたの提案をテストしましたが、うまくいきません。私は問題は、全体のオブジェクトu.Personとu.ProjectがNULLであり、PersNameとStudyNoのプロパティだけではないと思います。 Hucky – Hucky

+0

それが上のケースのソリューションであればうまくいくでしょう。 u.Personがnullでないかどうかを確認していて、u.Person.PersNameにアクセスしていることがわかります。 nullの場合、string.Emptyだけを設定します。 – brugi82

+0

c.Usagesが空であればnullではないと確信していますか?また、null参照例外がスローされる可能性があります。 – brugi82