c# - 如何在 Dapper .Query<>() 中添加新的 PropertyType

标签 c# sql sql-server dapper

我有一个名为 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 创建一个新类解决了这个问题我想要返回的两个数据集的属性类型( PersonTelephone )。需要注意的是,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/

相关文章:

c# - 如何在silverlight中播放swf文件?

c# - 连接字符串 : 'database' 中不支持关键字

mysql - 删除 mysql 查询中字符串字段上的重音

c# - XML 序列化命名空间和 XSD 生成

c# - 如何让 C# 查询组件识别从 sql 存储过程中的临时表返回的数据列

MySQL CREATE FUNCTION 语句似乎忽略了 WHERE 条件

sql - 是否有针对世界上所有地址的通用街道地址数据库设计?

sql-server - 使用具有不同扇区大小的备份的 Restore-SqlDatabase

sql - IF ELSE 为join 的条件?

mysql - 如何从 OSM 数据库正确获取位置?