Dapper 一对多查询 one to many

Posted lonelyxmas

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dapper 一对多查询 one to many相关的知识,希望对你有一定的参考价值。

原文:Dapper 一对多查询 one to many

参考文档:Dapper one to many

Table

public class Person

    public int Id  get; set; 
    public string Name  get; set; 
    public int Born  get; set; 
    public Country Residience  get; set; 
    public ICollection<Book> Books  get; set; 


public class Country

    public int CountryId  get; set; 
    public string CountryName  get; set; 


public class Book

    public int BookId  get; set; 
    public string BookName  get; set; 

C# Code

pulic List<Person> GetPersons()
 var sql = @"SELECT 1 AS Id, 'Daniel Dennett' AS Name, 1942 AS Born, 1 AS CountryId, 'United States of America' AS CountryName, 1 AS BookId, 'Brainstorms' AS BookName
UNION ALL SELECT 1 AS Id, 'Daniel Dennett' AS Name, 1942 AS Born, 1 AS CountryId, 'United States of America' AS CountryName, 2 AS BookId, 'Elbow Room' AS BookName
UNION ALL SELECT 2 AS Id, 'Sam Harris' AS Name, 1967 AS Born, 1 AS CountryId,  'United States of America' AS CountryName, 3 AS BookId, 'The Moral Landscape' AS BookName
UNION ALL SELECT 2 AS Id, 'Sam Harris' AS Name, 1967 AS Born, 1 AS CountryId,  'United States of America' AS CountryName, 4 AS BookId, 'Waking Up: A Guide to Spirituality Without Religion' AS BookName
UNION ALL SELECT 3 AS Id, 'Richard Dawkins' AS Name, 1941 AS Born, 2 AS CountryId,  'United Kingdom' AS CountryName, 5 AS BookId, 'The Magic of Reality: How We Know What`s Really True' AS BookName
UNION ALL SELECT 3 AS Id, 'Richard Dawkins' AS Name, 1941 AS Born, 2 AS CountryId,  'United Kingdom' AS CountryName, 6 AS BookId, 'An Appetite for Wonder: The Making of a Scientist' AS BookName";

var remainingHorsemen = new Dictionary<int, Person>();
connection.Query<Person, Country, Book, Person>(sql, (person, country, book) => 
    //person
    Person personEntity;
    //trip
    if (!remainingHorsemen.TryGetValue(person.Id, out personEntity))
    
        remainingHorsemen.Add(person.Id, personEntity = person);
    

    //country
    if(personEntity.Residience == null)
    
        if (country == null)
        
            country = new Country  CountryName = "" ;
        
        personEntity.Residience = country;
                        

    //books
    if(personEntity.Books == null)
    
        personEntity.Books = new List<Book>();
    

    if (book != null)
    
        if (!personEntity.Books.Any(x => x.BookId == book.BookId))
        
            personEntity.Books.Add(book);
        
    

    return personEntity;
, 
splitOn: "CountryId,BookId");

return remainingHorsemen.Value.ToList(); 

以上是关于Dapper 一对多查询 one to many的主要内容,如果未能解决你的问题,请参考以下文章

EntityFramework Code-First 简易教程-------一对多

Ruby on Rails,一对多关联(One-to-Many)

MyBatis嵌套查询解析

MyBatis嵌套查询解析

MyBatis嵌套查询解析

django之跨表查询及添加记录