我在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"类型的指定强制转换无效.
最简单的方法(SQL Server端)是值转换0和1对BIT数据类型:
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 Database Engine type ? .NET Framework type ? SqlDbType enumeration ?
?????????????????????????????????????????????????????????????????????????????????
? bit ? Boolean ? Bit ?
?????????????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)