我有一个名为 Person
的 C# 类,在该类中,Person 具有 TelephoneDetails
类型的 Telephone
属性。
我正在尝试使用 Dapper 查询数据库,在查询中,我需要检索当前电话号码(称为“详细信息”)并将其放入我的 Telephone
属性中。
这是我尝试过的:
var person = _connection.Query<Person>($"SELECT person AS Person, Detail AS {new TelephoneDetails{Telephone = ""}} " + // Here's my issue
"FROM dbo.Foo WHERE PersonId = @id",
new {id}).FirstOrDefault();
return person;
每次返回局部变量 person
时,我都会在电话属性中返回空值。如何从数据库中获取数据实例化属性?
我觉得我已经提供了所需的一切,但如果没有,请使用评论部分进行澄清。
提前致谢。
最佳答案
答案是@Markeli 和@Flydog57 评论的集合
我通过使用 string
创建一个新类解决了这个问题我想要返回的两个数据集的属性类型( Person
和 Telephone
)。需要注意的是,Dapper 使用系统方法,因此您首先在记录集中输入 <TFirst>
应与您首先检索的内容 ( Person
) 匹配,并应按此顺序进行。
public Person GetPersonDetails(int id)
{
var person= _connection.Query<Person, TelephoneDetails, PersonDetailsRoot>(
"SELECT p.* "/* TFirst */", td.* " +
"FROM Person p " +
"INNER JOIN TelephoneDetails td ON p.PersonContactId = td.ContactId " +
"WHERE Id = @id",
(person /* This is first to match the TFirst*/, details) => new PersonDetailsRoot // The new class made
{
PersonName = person.Adviser,
TelephoneNumber = detail.Detail
},
new {id},
splitOn: "ContactId"
).ToList();
if (!person.Any())
{
return null;
}
return new PersonDetails();
关于c# - 如何在 Dapper .Query<>() 中添加新的 PropertyType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53523921/