Могу ли я привести DateTime к Биту для логической оценки, если DateTime равен нулю? - PullRequest
2 голосов
/ 30 июня 2011

Я относительно новичок в .Net и SQL Server, и мне нужно иметь возможность выполнить логическую проверку типа данных DateTime для нулевого значения.

Я использую следующее утверждение, которое явно неверно, так как при отладке возвращает Int32 в моем непосредственном окне Visual Studio. Я использую 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) ха!

Буду признателен, если кто-нибудь поможет мне понять, что я делаю неправильно и что делать / избегать в будущем при попытке сделать что-то подобное.

ТИА

dotnetnewb

Ответы [ 3 ]

2 голосов
/ 30 июня 2011

как насчет расширения вашей модели?Ваша хранимая процедура (допустим, она называется GetMyData), скорее всего, вернет ISingleResult.

Если это так, перейдите к вашему 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 голосов
/ 30 июня 2011

Ваш оператор SQL с CAST верен:

Тип данных SQL bit наиболее близок к .net "логическому", который вы получите.

Примечание: вы всегда получите число 1 или 0 только с типом данных с битами. Нет ложного или истинного, потому что это не логическое значение

0 голосов
/ 30 июня 2011

Попробуйте это:

(dbo.Expense.AuthorisedDate is null) as HasAuthorisedDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...