从SQL Server中的SELECT获取布尔值到C#中的bool?

5 c# sql-server asp.net

我在SELECT中有这个代码:

SELECT  A.CompletedDate,
    CASE
        WHEN (@AdminTestId IS NULL AND @UserTestId IS NULL) THEN 0
        WHEN (@AdminTestId = temp.AdminTestId AND @UserTestId = A.UserTestId) THEN 1
        WHEN (@AdminTestId = temp.AdminTestId AND @UserTestId IS NULL) THEN 1
    ELSE 0
    END AS [Current], 
Run Code Online (Sandbox Code Playgroud)

在我的ASP.NET DTO中我有:

public partial class GetTestsDTO
{
    public bool? GradePass { get; set; }
    // the following line is what is giving the error. If I remove
    // the line it will not try to convert the data and there is no
    // error. Note that I want to put this into a bool as web.api
    // then passes it to the client as a bool
    public bool Current { get; set; } 
    public DateTime? CompletedDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误,我会感激一些帮助.

错误是:

message =从具体化的"System.Int32"类型到"System.Boolean"类型的指定强制转换无效.

Luk*_*zda 7

最简单的方法(SQL Server端)是值转换01BIT数据类型:

SELECT  A.CompletedDate,
  CASE
    WHEN (@AdminTestId IS NULL AND @UserTestId IS NULL) 
    THEN CAST(0 AS BIT)
    WHEN (@AdminTestId = temp.AdminTestId AND @UserTestId = A.UserTestId) 
    THEN CAST(1 AS BIT)
    WHEN (@AdminTestId = temp.AdminTestId AND @UserTestId IS NULL) 
    THEN CAST(1 AS BIT)
   ELSE CAST(0 AS BIT)
  END AS [Current], 
Run Code Online (Sandbox Code Playgroud)

或者整个表达:

SELECT  A.CompletedDate,
    CAST((CASE
         WHEN (@AdminTestId IS NULL AND @UserTestId IS NULL) THEN 0
         WHEN (@AdminTestId = temp.AdminTestId AND @UserTestId = A.UserTestId) THEN 1
         WHEN (@AdminTestId = temp.AdminTestId AND @UserTestId IS NULL) THEN 1
         ELSE 0
         END)
         AS BIT) AS [Current], 
Run Code Online (Sandbox Code Playgroud)

SQL Server数据类型映射:

?????????????????????????????????????????????????????????????????????????????????
? SQL Server Database Engine type ? .NET Framework type ? SqlDbType enumeration ?
?????????????????????????????????????????????????????????????????????????????????
? bit                             ? Boolean             ? Bit                   ?
?????????????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)