我有一个名为Person
的C#类,并且在该类中,Person具有Telephone
类型的TelephoneDetails
属性。
我正在尝试使用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
时,都会在我的电话属性中返回空值。如何从数据库中实例化属性的数据?
我觉得我已经提供了所有必要的信息,但如果没有,请使用注释部分进行澄清。
谢谢。
答案 0 :(得分:1)
答案是@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();