我在Complex Types
中创建了DemoModel.edmx
,即 GetIsActive_Result 。它有一个Scalar Property
,即类型为 Int32 的 InvitationID 。我创建了一个执行存储过程的函数。在这里我的功能。
public GetIsActive_Result GetIsActiveUser(string email)
{
GetIsActive_Result result = null;
System.Data.Objects.ObjectParameter InvitationID;
InvitationID = new System.Data.Objects.ObjectParameter("InvitationID", -1);
var results = this.DataContext.GetIsActiveUser(email, InvitationID);
if (results != null)
{
result = results.FirstOrDefault();
}
return result;
}
此功能执行存储过程,即 GetIsActiveUser 。
USE [Demo]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [dbo].[GetIsActiveUser]
(
@Email NCHAR(100),
@InvitationID INT OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
IF EXISTS(select * from Users,Invitations where UserName=@Email and IsActive='Active' and Invitations.Email != @Email)
BEGIN
SET @InvitationID=1
END
ELSE IF EXISTS(select * from Users,Invitations where UserName=@Email and IsActive='InActive' and Invitations.Email = @Email)
BEGIN
SET @InvitationID=0
END
SELECT @InvitationID AS InvitationID
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK
END
EXEC ThrowError
END CATCH
END
这是一个简单的商店程序,它返回 InvitationID 。我在第result = results.FirstOrDefault();
行
无法隐式转换类型'int?'到'DemoAppWebService.GetIsActive_Result'
如何解决此错误?我的代码出了什么问题?
答案 0 :(得分:3)
DataContext.GetIsActiveUser
返回一个可以为空的int。并且您正在尝试将其解析为DemoAppWebService.GetIsActive_Result
,这是不允许的。您需要更改下面的方法
或者,如果您希望现有代码(略有修改)工作,则方法DataContext.GetIsActiveUser
需要返回DemoAppWebService.GetIsActive_Result
public int? GetIsActiveUser(string email)
{
System.Data.Objects.ObjectParameter InvitationID;
InvitationID = new System.Data.Objects.ObjectParameter("InvitationID", -1);
return this.DataContext.GetIsActiveUser(email, InvitationID);
}
答案 1 :(得分:1)
您可以使用linq
var results = this.DataContext.GetIsActiveUser(email, InvitationID)
.Cast<GetIsActive_Result>();
警告错误/或如果无法投射则返回NULL
或者您可以使用Nullable GetIsActive_Result
结果构建int
的对象。