2013-12-10 82 views
24

我似乎無法找到我的問題的文檔或示例(現在搜索了一段時間)。我認爲我的問題很簡單,所以在這裏。Dapper簡單的內部連接結果?

我有兩個表。我的主表叫做Persons,輔助表是PersonEntries。對於Person表中的每個人,我可以在PersonEntries表中有0個或更多個條目。喜歡這個。

Table: Person 
Id 
Name 

Table: PersonEntry 
PersonId 
CheckinTime 
CheckoutTime 

我有兩個物體像這樣

public class Person { 
    public string Name; 
    public List<PersonEntry> PersonEntries; 
} 

public class PersonEntry { 
    public DateTime CheckinTime; 
    public DateTime CheckoutTime; 
} 

如果我是從數據庫中獲取到我的C#類如何將我做呢?我可以將單個表映射到我的c#類中,併爲每個表執行此操作,但是我只需將匹配哪些條目映射到哪個人。

我見過的映射ONE PersonEntry一個人的幾個例子,這裏的問題是,我有一個零一對多的關係。我的人擁有PersonEntry項目的列表

回答

24

你可以做這樣的事情(見https://www.tritac.com/blog/dappernet-by-example):

public class Shop { 
    public int? Id {get;set;} 
    public string Name {get;set;} 
    public string Url {get;set;} 
    public IList<Account> Accounts {get;set;} 
} 

public class Account { 
    public int? Id {get;set;} 
    public string Name {get;set;} 
    public string Address {get;set;} 
    public string Country {get;set;} 
    public int ShopId {get;set;} 
} 

var lookup = new Dictionary<int, Shop>() 
conn.Query<Shop, Account, Shop>(@" 
       SELECT s.*, a.* 
       FROM Shop s 
       INNER JOIN Account a ON s.ShopId = a.ShopId      
       ", (s, a) => { 
        Shop shop; 
        if (!lookup.TryGetValue(s.Id, out shop)) { 
         lookup.Add(s.Id, shop = s); 
        } 
        if (shop.Accounts == null) 
         shop.Accounts = new List<Account>(); 
        shop.Accounts.Add(a); 
        return shop; 
       } 
       ).AsQueryable(); 
var resultList = lookup.Values; 
+0

最後一個參數打開運算的強大功能。我沒有想到像那樣解決它 - 希望獲得更加本土化的功能,但是這樣做。謝謝 :) –