Dapper 一对多查询 one to many
Posted lonelyxmas
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 简易教程-------一对多