0

我创建了一个Complex TypesGetIsActive_ResultDemoModel.edmx. 它有一个,Scalar PropertyInt32类型的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”

我该如何解决这个错误?我的代码有什么问题?

4

2 回答 2

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);
}
于 2013-08-21T17:11:46.877 回答
1

你可以使用 linq

var results = this.DataContext.GetIsActiveUser(email, InvitationID)
.Cast<GetIsActive_Result>();

警告错误/如果无法投射,则返回 NULL

GetIsActive_Result或者,您可以使用 Nullable intResult构造一个对象。

于 2013-08-21T17:13:28.463 回答