返回单个参数作为多映射查询的一部分

时间:2012-12-04 16:03:18

标签: c# dapper

我有一个场景,我需要在 Dapper 中作为多地图查询的一部分返回单个列。

我简化了下面的示例,但实质上我要检索的单列值(int)不是Post类的属性(但在数据库表中)。

我想自己获取这个值,因为它的使用方式类似于示例中的以下行,其中status是有问题的int值:

post.SetSomeStatus(status);

以下是代码示例:

  var sql = 
    @"select *, p.Status from #Posts p 
    left join #Users u on u.Id = p.OwnerId
    Order by p.Id";

    var data = connection.Query<Post, User, int, Post>(sql, (post, user, status) => { 
        post.Owner = user;
        post.SetSomeStatus(status);
        return post;
    });

    var post = data.First();

我在这段代码中看到以下错误:索引超出了数组的范围

1 个答案:

答案 0 :(得分:0)

错误的原因:索引超出了数组的范围是由于Dapper将查询响应的各个部分拆分为在返回参数上分配的方式Post,User &安培;在这个例子中是int。 Dapper的约定是拆分字段ID或提供您自己的规则以使用 splitOn 参数拆分结果集。

使上述示例有效:

  var sql = 
    @"select *, p.Status AS ID from #Posts p 
    left join #Users u on u.Id = p.OwnerId
    Order by p.Id";

    var data = connection.Query<Post, User, int, Post>(sql, (post, user, status) => { 
        post.Owner = user;
        post.SetSomeStatus(status);
        return post;
    });

    var post = data.First();

我发现另一个问题也帮助了我:Correct use of Multimapping in Dapper