sql-server - 使用 Dapper 将带有表示列表的字符串的列映射到 List<> 对象

标签 sql-server dapper string-split dapper-extensions

我有以下模型:

public class Model {
   public string Name { get; set; }
   public List<int> Numbers { get; set; }
}
SQL 查询返回以下包含两个 nvarchar 列的数据集:
 Name |  Numbers
'foo' | '1,2,3,4'
'bar' | '4,17'

有没有一种简单的方法可以使用 List<Model> 将查询结果自动分配给 Dapper

我知道我可以使用多重映射并在 C# 代码中自己进行拆分,但我宁愿得到一个更简单的解决方案。

最佳答案

我不确定你是否可以称之为“更简单”,但这样的事情是一个选择:

public class Result
{
    public string Name { get; set; }
    public List<int> Numbers { get; set; }
}
public class DapperTests
{
    [Test]
    public void Test()
    {
        var conn = new SqlConnection(@"Data Source=.\sqlexpress; Integrated Security=true; Initial Catalog=mydb");

        conn.Open();

        var result = conn.Query<string, string, Result>(
                    "select Name = 'Foo', Numbers = '1,2,3' union all select Name = 'Bar', Numbers = '4,5,6'", (a, b) => new Result
                    {
                        Name = a,
                        Numbers = b.Split(',').Select(Int32.Parse).ToList()
                    }, splitOn: "*").ToList();

        Assert.That(result.Count, Is.EqualTo(2));
        Assert.That(result.FirstOrDefault(x => x.Name == "Foo").Numbers.Count, Is.GreaterThan(0));
        Assert.That(result.FirstOrDefault(x => x.Name == "Bar").Numbers.Count, Is.GreaterThan(0));
    }
}

关于sql-server - 使用 Dapper 将带有表示列表的字符串的列映射到 List<> 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34929231/

相关文章:

r - 如何在 R 中将文本拆分为两个有意义的词

sql-server - Azure VM 上 SQL Server 的连接字符串

c# - 如何使用 Dapper 插入 DateTime(或 DateTime2)?

r - 将字符串拆分为给定长度的子字符串并带有余数

postgresql - 如何从 Dapper(使用 Npgsql)调用具有混合大小写名称的存储过程?

c# - Dapper Multi Mapping 上的某些值返回 null

java - 标记包含空标记的字符串

sql - 在 SQL 中将数据从一个数据库导出到另一个数据库时忽略重复的主键

sql-server - 导出事务表增量数据的最佳方法

sql - Go命令错误