Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Dapper.Query中添加新的PropertyType()_C#_Sql_Sql Server_Dapper - Fatal编程技术网

C# 如何在Dapper.Query中添加新的PropertyType()

C# 如何在Dapper.Query中添加新的PropertyType(),c#,sql,sql-server,dapper,C#,Sql,Sql Server,Dapper,我有一个名为Person的C类,在该类中,Person有一个类型为TelephoneDetails的电话属性 我正在尝试使用Dapper查询数据库,在我的查询中,我需要检索称为Detail的当前电话号码,并将其放入我的电话属性中 以下是我尝试过的: var person = _connection.Query<Person>($"SELECT person AS Person, Detail AS {new TelephoneDetails{Telephone = ""}}

我有一个名为Person的C类,在该类中,Person有一个类型为TelephoneDetails的电话属性

我正在尝试使用Dapper查询数据库,在我的查询中,我需要检索称为Detail的当前电话号码,并将其放入我的电话属性中

以下是我尝试过的:

    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评论的集合

我解决了这个问题,为ReturnPerson和Telephone中需要的两个数据集创建了一个具有字符串属性类型的新类。需要注意的是Dapper使用了一种系统化的方法,因此记录集中的第一个类型应该与您检索的第一个人相匹配,并且应该按照以下顺序进行

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();

Dapper不是复杂的ORM,所以您不能:使用Dapper的最佳方法是创建一个POCO普通旧CLR对象,即一个只包含每个查询的公共属性getter和setter的类。属性应该与查询的列匹配。然后使用查询调用创建该类集合的实例