我需要在D#中使用C#7中的新元组返回一个列表.
public static List<(int StyleId, decimal StyleCode)> GetOnlyServices() { var query = $@" SELECT ST.style_id as StyleId, ST.style_code as StyleCode ... ..."; using (SqlConnection db = new SqlConnection(InfobaseConString)) { var a = db.Query<(int StyleId, decimal StyleCode)>(query, commandTimeout: 90).ToList(); return a; } }
但是这个函数只返回56行(0,0), Item1=0, Item2=0
.我错过了什么?
坦率地说,它只是不支持元组的工作方式.Dapper的反序列化器使用构造函数参数或属性/字段在对象的类型中按名称映射列值.(来源如果你能理解生成的IL).
ValueTuples,另一方面仍只相当于商品属性名称的元组(Item1
,Item2
,等),但使用的编译器/ IDE魔法使他们通过其他名称进行访问.所以StyleId
或者StyleCode
不是实际的属性名称,它们只是Item1
和的别名Item2
.
您要么必须等待团队添加对ValueTuples的显式支持,要么在查询中使用预期的属性名称.
var query = $@" SELECT ST.style_id as Item1, ST.style_code as Item2 ... ...";