2013-08-21 40 views
0

我已经创建了Complex Types,即GetIsActive_Result in DemoModel.edmx。它有一个Scalar Property,即邀请ID类型Int32。我创建了一个执行存储过程的函数。在这里我的功能。不能隐式转换int?复杂类型

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 [email protected] and IsActive='Active' and Invitations.Email != @Email) 
     BEGIN 
      SET @InvitationID=1 
     END 

    ELSE IF EXISTS(select * from Users,Invitations where [email protected] 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'

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

+1

为什么(INT作为复杂类型的复杂混淆)? –

+0

其实最终结果会来''ObjectParameter'' InvitationID' Rite ??是否是参数?或者函数GetIsActiveUser的返回对象是如何构造的?但只有诠释返回????? –

回答

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); 
} 
+0

是的......另一种方法......了解到。谢谢@NoOne –

+0

我已经在GetIsActiveUser –

+1

中设置了InvitationID的Nullable属性,问题在于你的方法DataContext.GetIsActiveUser(email,InvitationID);返回一个int?不是DemoAppWebService.GetIsActive_Result – Ehsan

1

你可以使用LINQ

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

警告错误/或返回NULL,如果无法转换

或者你可以构建的对象与可为空int结果。

+0

我已经在GetIsActiveUser中设置了InvitationID的Nullable属性 –

+0

嘿,我在函数导入中给出了错误的书写类型。非常感谢您的帮助 –

相关问题