Jam*_*aix 5 c# sql-server orm dapper
我正在使用 Dapper 将来自 SQL Server 数据库的对象映射到 C# 类。我需要从中提取结果的存储过程之一可以具有可变数量的列,具体取决于上下文。此结果集始终具有一个主键列,然后是 0 到 30 个附加列,这些列都具有相同的数据类型。
结果集列基本上是这样的:
CustomerID | Email1 | Email2 | Email3 | ...
Run Code Online (Sandbox Code Playgroud)
其中列数Email*取决于查询中客户存档的最大电子邮件地址数。
在 C# 中捕获此问题的自然方法是使用如下类:
class Customer {
int ID { get; set; }
string[] EmailAddresses { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用 Dapper 将我的结果集映射到这样的对象?
如果你通过做一些魔法,这是可能的dynamic。
var user = connection.Query("spGetUser", commandType: CommandType.StoredProcedure)
.Select(x =>
{
var result = new Customer { ID = x.Id };
foreach (var element in x)
{
if (element.Key.Contains("Email"))
result.EmailAddresses.Add(element.Value.ToString());
}
return result;
}).FirstOrDefault();
public class Customer
{
public int ID { get; set; }
public List<string> EmailAddresses { get; set; } = new List<string>();
}
Run Code Online (Sandbox Code Playgroud)
几个关键点:
Value,也不会在调用.ToString()它之前检查是否确实存在一个值。