I have one row coming from the database
select "John" Name, 
       "Male" Gender,
       20 Age,
       "Rex" PetName,
       "Male" PetGender,
       5 PetAge
       // ... many more ...
Using Dapper, I'd like to pull this row into two objects:
class Person
{
    public string Name { get; set; }
    public string Gender { get; set; }
    public int Age { get; set; }
    // ... many more ...
}    
class Pet
{
    public string PetName { get; set; }
    public string PetGender { get; set; }
    public int PetAge { get; set; }
    // ... many more ...
}
Note: there is no hierarchical relationship here, I'm simply trying to map one database row into two (or more) objects.
How can I do this using dapper?
What I've tried:
QueryMultiple<Person,Pet>, but it assumes I am running multiple queries. In my real-life scenario, this is a very expensive query, and I'd like to just run it once.  Query<Person,Pet,Tuple<Person,Pet>>, but this requires an Id column, here there's no hierearchical relationship or Ids. I just want to take a single row and map it to multiple columns. splitOn: CustomerId will result in a null customer name. If you specify CustomerId,CustomerName as split points, dapper assumes you are trying to split up the result set into 3 objects. First starts at the beginning, second starts at CustomerId , third at CustomerName .
Note: QueryFirstOrDefault method is a method that can execute a query and map the first result, or a default value if the sequence contains no elements.
You were pretty close to solution with the Query method. If you don't have an Id column, then you can provide a splitOn argument:
connection.Query<Person, Pet, Tuple<Person, Pet>>(sql, 
    (person, pet) => Tuple.Create(person, pet), splitOn: "PetName");
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With