2012-01-22 17 views
2

ブール値MyBoolを含むオブジェクトモデルがあり、フィールドMyFieldを含むテーブルがあります。私は、MyFoolが値を持っているかどうかに応じて、MyBoolがtrueまたはfalseに設定されたオブジェクトのリストを返すlinq-to-SQLクエリを作成しています。DBフィールドにデータが含まれている場合にブール値を返す

これは私がこれまで持っているものです。

var TheListOfObjects = (from thetable in MyDC.TheTable 
         .... 
         select new MyObject() 
         { 
          MyBool = thetable.MyField.Contains("*") 

         }).ToList(); 

私はエラー:ヌル値がnull非許容値型であるタイプ可能System.Booleanを持つメンバーに割り当てることはできません。含まれていないとboolを返しますか?

私には何が欠けていますか?おかげさまで

+0

を割り当てているときにnullをチェックすることができMyObjectにでNULL値可能性がない場合、私は、LINQについてのなめるを知らないが、SQL構文は、キーワードをEXISTSます。.. IF EXISTS(テーブルから1つ選択)BEGIN。あなたのGoogleの努力にそれを加えれば、さらにあなたを得るかもしれません。 –

答えて

2

あなたが

var TheListOfObjects = (from thetable in MyDC.TheTable 
         .... 
         select new MyObject() 
         { 
          MyBool = (thetable.MyField == null) ? false : thetable.MyField.Contains("*") //check if it's null in-line 

         }).ToList(); 
+0

また、これも動作しますか?MyBool =(thetable.MyField == null)? false:true – frenchie

+0

が動作しますが、それをさらに縮退することができます。 'MyBool =(thetable.MyField == null)' – Jason

1

は、あなたはそれが正しいbool? MyBool {get;set;}

+0

私はこれを修正するだろう知っているが、私はオブジェクトモデルを維持し、代わりにクエリを変更するために探しています。 – frenchie

2

ハリスハサンに変更bool MyBool {get;set;}

DB

で返される可能性のヌル値を受け入れることができるようにあなたのブール変数NULL可能を確認する必要があります。

(CHARINDEX(MyField, '*', 1) - 1) 

しかしのMyFieldがnullの場合、この式はヌル自体に変身:本当にこの問題を理解するために、あなたのC#コードはに変わるかもしれないものSQLを考えます!

Linq2SqlはC#のセマンティクスを保証しません!これはC#セマンティクスの優れた近似を提供しますが、SQLモデルに近いです。

あなたはどちらか

MyBool = (bool?)thetable.MyField.Contains("*") ?? false 

または

MyBool = thetable.MyField != null && thetable.MyField.Contains("*") 

を言うことによってあなたはまたMyBoolがNULL可能で作ることができるが、それはあなたがindend何だろうではありませんと言って、この問題を解決することができます。

Btwの場合、SQLは結合された行をNULLで埋めるため、左結合に失敗すると同じ奇妙な動作が発生します。

+0

私はそれを得ました。これも動作しますか?MyBool =(thetable.MyField == null)? false:true – frenchie

+0

これは少し不器用ですが、そうです。 – usr

関連する問題