0

Complex Typesつまり、 GetIsActive_Resultを作成しましたDemoModel.edmxScalar Property Int32型のInvitationIDが 1 つあります。ストア プロシージャを実行する関数を 1 つ作成しました。ここで私の機能。

    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

null許容の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 に答える