Sql server 将包含表示列表的字符串的列映射到列表<&燃气轮机;使用整洁的对象
我有以下型号:Sql server 将包含表示列表的字符串的列映射到列表<&燃气轮机;使用整洁的对象,sql-server,dapper,string-split,dapper-extensions,Sql Server,Dapper,String Split,Dapper Extensions,我有以下型号: public class Model { public string Name { get; set; } public List<int> Numbers { get; set; } } 是否有一种简单的方法可以使用Dapper将查询结果自动分配到列表 我知道我可以使用多重映射,自己在C代码中进行拆分,但我更希望得到一个更简单的解决方案。我不确定是否可以称之为“更简单”,但类似这样的选项是: public class Result { publ
public class Model {
public string Name { get; set; }
public List<int> Numbers { get; set; }
}
是否有一种简单的方法可以使用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));
}
}
公共类结果
{
公共字符串名称{get;set;}
公共列表编号{get;set;}
}
公共类测试
{
[测试]
公开无效测试()
{
var conn=new SqlConnection(@“数据源=。\sqlexpress;集成安全性=true;初始目录=mydb”);
conn.Open();
var结果=连接查询(
“选择名称='Foo',数字='1,2,3'联合所有选择名称='Bar',数字='4,5,6'”(a,b)=>新结果
{
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,大于(0));
Assert.That(result.FirstOrDefault(x=>x.Name==“Bar”).Numbers.Count,大于(0));
}
}
具有多重映射的可选选项。。。很丑
public class Result
{
public string Name { get; set; }
public List<int> NumberList { get; set; }
public string Numbers { set { NumberList = value.Split(',').Select(Int32.Parse).ToList(); } }
}
public class DapperTests
{
[Test]
public void Test()
{
var conn = new SqlConnection(@"Data Source=.\sqlexpress; Integrated Security=true; Initial Catalog=mydb");
conn.Open();
var sql = @"
select Name = 'Foo', Numbers = '1,2,3';
select Name = 'Bar', Numbers = '4,5,6';";
var expectedResults = 2;
var results = new List<Result>();
using (var multi = conn.QueryMultiple(sql))
{
for (int i = 0; i < expectedResults; i++)
{
results.Add(multi.Read<Result>().Single());
}
}
Assert.That(results.Count, Is.EqualTo(2));
Assert.That(results.FirstOrDefault(x => x.Name == "Foo").NumberList.Count, Is.GreaterThan(0));
Assert.That(results.FirstOrDefault(x => x.Name == "Bar").NumberList.Count, Is.GreaterThan(0));
}
}
公共类结果
{
公共字符串名称{get;set;}
公共列表编号列表{get;set;}
公共字符串编号{set{NumberList=value.Split(',).Select(Int32.Parse.ToList();}
}
公共类测试
{
[测试]
公开无效测试()
{
var conn=new SqlConnection(@“数据源=。\sqlexpress;集成安全性=true;初始目录=mydb”);
conn.Open();
var sql=@”
选择名称='Foo',数字='1,2,3';
选择名称='Bar',数字='4,5,6';“;
var expectedResults=2;
var results=新列表();
使用(var multi=conn.QueryMultiple(sql))
{
for(int i=0;ix.Name==“Foo”).NumberList.Count,比(0)大);
Assert.That(results.FirstOrDefault(x=>x.Name==“Bar”).NumberList.Count,大于(0));
}
}
如果您的select中有七列以上,您怎么做*
public class Result
{
public string Name { get; set; }
public List<int> NumberList { get; set; }
public string Numbers { set { NumberList = value.Split(',').Select(Int32.Parse).ToList(); } }
}
public class DapperTests
{
[Test]
public void Test()
{
var conn = new SqlConnection(@"Data Source=.\sqlexpress; Integrated Security=true; Initial Catalog=mydb");
conn.Open();
var sql = @"
select Name = 'Foo', Numbers = '1,2,3';
select Name = 'Bar', Numbers = '4,5,6';";
var expectedResults = 2;
var results = new List<Result>();
using (var multi = conn.QueryMultiple(sql))
{
for (int i = 0; i < expectedResults; i++)
{
results.Add(multi.Read<Result>().Single());
}
}
Assert.That(results.Count, Is.EqualTo(2));
Assert.That(results.FirstOrDefault(x => x.Name == "Foo").NumberList.Count, Is.GreaterThan(0));
Assert.That(results.FirstOrDefault(x => x.Name == "Bar").NumberList.Count, Is.GreaterThan(0));
}
}