现在的位置: 首页 > 综合 > 正文

IMultipleResults 实现linq存储过程返回多条结果集

2013年09月14日 ⁄ 综合 ⁄ 共 1278字 ⁄ 字号 评论关闭

ISingleResult 处理单个返回结果集:比如select * from UserInfo

IMultipleResults处理多个返回结果集:比如 select * from UserInfo;select * from Role

 

LinqDBDataContext db = new LinqDBDataContext(SqlHelper.SqlConnectString);

IMultipleResults result = db.Pr_GetUserAndRole();//执行存储过程s返回两个结果集

        IEnumerable<UserInfo> users = from u in result.GetResult<UserInfo>()//UserInfo结果集
                                      where u.ID < 10
                                      select u;
        IEnumerable<Role> roles = result.GetResult<Role>();//Role结果集
        gvUser.DataSource = users;//绑定
        gvUser.DataBind();
        gvRole.DataSource = roles;//绑定
        gvRole.DataBind();

 

下面是自动生成的Pr_GetUserAndRole()方法

 //[Function(Name="dbo.Pr_GetUserAndRole")]
    //public ISingleResult<Pr_GetUserAndRoleResult> Pr_GetUserAndRole()
    //{
    //    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())));
    //    return ((ISingleResult<Pr_GetUserAndRoleResult>)(result.ReturnValue));
    //}

下面是修改后的Pr_GetUserAndRole()方法

    [Function(Name = "dbo.Pr_GetUserAndRole")]
    [ResultType(typeof(UserInfo))]    //这一句很重要,是多出来的,因为必需要返回一个类型。
    public IMultipleResults Pr_GetUserAndRole()
    {
        IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())));
        return ((IMultipleResults)(result.ReturnValue));
    }

 

 

抱歉!评论已关闭.