我对.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
答案 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。没有错误或真实,因为它不是布尔