如何在dapper中返回原始数据类型的元组

本文关键字:原始 数据类型 元组 返回 dapper | 更新日期: 2023-09-27 18:03:33

我一直在为我的一个项目使用dapper,在一个案例中,我想返回一个原始数据类型的元组。(只有一行)既然我用了dapper,我真的很想在这个例子中也使用dapper。我检查了这些链接,但找不到解决方案

我可以映射一个结果到元组在Dapper?

从一行中裁剪多个对象

使用Dapper映射多于5个类型

这是我的代码,
Using(_dbTransaction = _dbConnection.BeginTransaction()){
     var command = new CommandDefinition(
                "SELECT ID1,ID2 " +
                "FROM table " +
                "WHERE ID0 = @ID",
                new {ID = 34},_dbTransaction); //34 is just a number
    var dataSet   = _dbConnection.QueryFirst<Tuple<uint, decimal>>(command);
    //assign the retrieved values to properties of orderItem (orderItem is a passed object as a parameter)
    orderItem.Id = dataSet.item1;
    orderItem.ContainerPrice = dataSet.item2; 
}

但是这会产生一个异常

{"一个无参数的默认构造函数或一个匹配的签名(System。UInt32 Id, System。对于System. tuple ' 2[[System. tuple],需要使用Decimal ContainerPrice)。UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System. xml]。十进制,mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] materialization"}

如果你能建议一个方法或指出我错在哪里,那将是很大的帮助

如何在dapper中返回原始数据类型的元组

如果你想使用Tuple,你可以试试:

    [Test]
    public void TupleTest()
    {
        var result = _connection.Query<int, decimal, Tuple<int, decimal>>
            ("select 1 as Id, 12.99 as ContainerPrice", Tuple.Create, splitOn: "*")
            .FirstOrDefault();
        Assert.That(result.Item1, Is.EqualTo(1));
        Assert.That(result.Item2, Is.EqualTo(12.99));
    }

你也可以避免使用元组,使用动态的:

    [Test]
    public void DynamicTest()
    {
        var result = _connection.Query<dynamic>
            ("select 1 as Id, 12.99 as ContainerPrice")
            .FirstOrDefault();
        Assert.That(result.Id, Is.EqualTo(1));
        Assert.That(result.ContainerPrice, Is.EqualTo(12.99));
    }