繁体   English   中英

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

[英]how to return tuple of primitive data types in dapper

我一直在使用dapper作为我的一个项目,在一种情况下我想返回一个原始数据类型的元组。(只有一行)因为我使用了dapper,我真的想在这种情况下使用dapper。 我检查了这些链接但找不到解决方案

我可以将结果映射到Dapper中的Tuple吗?

从一行中精心设计多个对象

使用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.Tuple`2需要一个无参数的默认构造函数或一个匹配的签名(System.UInt32 Id,System.Decimal ContainerPrice)[[System.UInt32,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089 ],[System.Decimal,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]具体化“}

如果可以建议一种方法或指出我出错的地方,那将是一个很大的帮助

如果你想使用元组,你可以试试这个:

    [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));
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM