如果DateTime为null,我可以将DateTime转换为Bit以进行布尔评估吗?

时间:2011-06-30 07:36:51

标签: c# asp.net sql datetime casting

我对.Net和SQL Server相对较新,我需要能够对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" %>' />

根据返回的集合的布尔值,我想显示一个合适的图像。这是我在存储的proc'

中进行评估的尝试(咳咳)
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

随意嘲笑任何学校男生的错误或不理解,因为我是一个dot net newb(因此名字:P)ha!

如果有人能帮助我理解我做错了什么以及将来做什么/避免在做这样的事情时,我将不胜感激。

TIA

dotnetnewb

3 个答案:

答案 0 :(得分:2)

扩展你的模型怎么样?您的存储过程(假设它被称为GetMyData)可能会返回一个ISingleResult。

如果是这样,请转到您的DBML,查看代码(假设这是一个Web应用程序)并创建一个新的分部类:

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事件并在那里完成工作,尽管上面的内容将是我想到的更容易的路径。

干杯, 特里

答案 1 :(得分:0)

试试这个:

(dbo.Expense.AuthorisedDate is null) as HasAuthorisedDate

答案 2 :(得分:0)

使用CAST的SQL语句是正确的:

bit的SQL数据类型最接近你将获得的.net“boolean”。

注意:您只能从位数据类型中获取数字1或0。没有错误或真实,因为它不是布尔