2011-06-30 4 views
2

私は比較的新しい.NetとSQL Serverです.Null値のDateTimeデータ型でブールチェックを行う必要があります。DateTimeがnullの場合、ブール評価用にBitにDateTimeをキャストできますか?

デバッグ中にVisual Studioの即時ウィンドウでInt32を返すため、次のステートメントを使用しています。私はテーブルの束を呼び出すストアドプロシージャを呼び出すためにlinqを使用しています。

結果コレクションの一部がこのようにバインドされるマークアップ。

<asp:Image ID="imgAuthorised" ImageUrl='<%# (bool)DataBinder.Eval(Container.DataItem, "AuthorisedDate")?"/Horizon/Images/save16x16.png":"/Horizon/Images/delete16x16.png" %>' runat="server" ToolTip='<%# (bool)DataBinder.Eval(Container.DataItem, "AuthorisedDate")?"Authorised":"Not Authorised" %>' /> 

返されるコレクションのブール値に応じて、適切なイメージを表示します。ここで私はそうのように、この文をキャストしようとしている

CASE WHEN dbo.Expense.AuthorisedDate is null THEN 0 ELSE 1 END as AuthorisedDate 

ストアドプロシージャ」の中に評価を行うには私の試み(エヘン)があります。

CAST(CASE WHEN dbo.Expense.AuthorisedDate is null THEN 0 ELSE 1 END as bit) as AuthorisedDate 

私はドットネット初心者くさい(それ故に名前:P)だとして任意の学校の男の子のエラーや理解不足でクスクス笑い気軽にヘクタール!

このようなことをしようとすると、誰かが私が間違ってやっていることを理解し、今後何をやるべきか理解してもらえれば分かりますか?

TIA

dotnetnewb

答えて

2

あなたのモデルを拡張するのはどうですか?ストアドプロシージャ(GetMyDataと呼ばれると仮定して)は、ISingleResultを返す可能性があります。

もしそうなら、(これはWebアプリケーションであると仮定)あなたのDBML、ビューコードに移動し、新しい部分クラスを作成します。

public partial class GetMyDataResults 
{ 
    public bool IsAuthorised 
    { 
     get { return DateAuthorised.HasValue; } 
    } 
} 

そして、次のことができるようにする必要があります

<asp:Image ID="imgAuthorised" ImageUrl='<%# DataBinder.Eval(Container.DataItem, "IsAuthorised")?"/Horizon/Images/save16x16.png":"/Horizon/Images/delete16x16.png" %>' runat="server" ToolTip='<%# DataBinder.Eval(Container.DataItem, "IsAuthorised")?"Authorised":"Not Authorised" %>' />

また、OnItemDataBindingイベントにピギーバックしてそこで作業を行うこともできますが、上記の方が簡単だと思います。

乾杯、 テリー

+0

ありがとうテリー、あなたは私がdbmlを直接編集することを暗示していますか、モデルを拡張するクラス?乾杯! – dotnetnewb

+0

これはうまくいった!しかし、おそらく私のdbmlを再構築する必要がある場合、私はそれらの変更を失うだろう......しかし、外部の部分クラスは合理的な解決策です。ありがとうT! – dotnetnewb

+0

ahh、 'ViewCode'を実行すると、新しいDbmlFilename.csファイルが作成され、dbmlファイルを再生成するときに上書きされることはありませんが、ソリューション(別のcsファイル)は明らかにうまく機能します。 ) –

0

これを試してみてください:CASTと

(dbo.Expense.AuthorisedDate is null) as HasAuthorisedDate 
+0

おかげで、おそらく私も、それはその構文好きではないと私は一重引用符でそれを置く場合は、文字列値としてそれを認識していることをしようとしたことに言及している必要があります。 – dotnetnewb

+0

SQLで 'true'は' 1'で 'false'は' 0'で表されます –

+0

ありがとうエンリコ、私は理解しています... – dotnetnewb

0

あなたのSQL文は正しいです:

ビットのSQLデータ型は、「ブールを.NETに最も近いです"あなたは手に入れます。

注:ビットデータ型から数値1または0を取得することができます。ブール値ではないため、falseでもtrueでもない

+0

あなたの投稿をありがとう。コレクションが返されると、私の1または0はコンパイラによってInt32として認識されます。だから私のSQL構文が正しいと言っても、別のデータ型を返すなら、それ以外の方法はありませんか? – dotnetnewb

+0

@dotnetnewb:かなり。私のビットがブール型に直接変換可能であることを知っているので、 "ビット"が失われている他の理由がいくつかあります。 – gbn

関連する問題